请记住,声明和表格都有更多的内容,但为了便于阅读,我会保持简短。
我想知道用户是否进过商店。桌子看起来像这样。
--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
子句,并按任何字段筛选店铺列表。