请记住,声明和表格都有更多的内容,但为了便于阅读,我会保持简短。
我想知道用户是否进过商店。桌子看起来像这样。

--Shop--
ShopID

--Visit--
ShopID
UserID

下面是我目前的进展。
SELECT shop.ShopID, visit.UserID AS Visited FROM shop
LEFT OUTER JOIN visit ON shop.ShopID = visit.ShopID
WHERE UserID = 1

此代码的问题是,对于不是UserID 1的访问,它不会显示NULL。我试图将OR UserID IS NULL添加到声明中,但它只留下了所有没有任何用户访问过的商店。
我可以通过检查Visited是否与用户id相同来过滤它,但如果数据库可以将其写为1和0,则会容易得多。所以具体来说:
如何根据Visit表中是否有一个UserID 1与ShopID连接来生成Visited输出0或1?

最佳答案

Dennis Klopfer's answer是实现简单性和性能的途径。但也许你想要更像这样的东西,来检查给定的用户是否访问过每个商店:

shop |  visited by user 1
 #1  |       false
 #2  |       true

如果是这样的话,我会这样做:
   SELECT s.ShopID, IF(ISNULL(v.UserID), FALSE, TRUE) AS visited
     FROM shop S LEFT JOIN visit v ON s.ShopID = v.ShopID AND v.UserID = 1

当然,您也可以在查询中添加一个WHERE子句,并按任何字段筛选店铺列表。

10-04 20:18