MySQL LEFT JOIN过滤行为NULL

时间:2014-06-21 14:26:57

标签: mysql

我试图返回用户是否喜欢某个项目。我有MySQL声明:

SELECT *,`user_choice`.fav FROM `items`
LEFT JOIN `user_choice` ON `user_choice`.item_id = `items`.item_id

这将返回一整套结果,user_choice。fav等于0,1或NULL

但是,我想只显示给定用户的user_choice。fav(无论该值是什么),所以我为该用户添加了WHERE语句,如下所示:

SELECT *,`user_choice`.fav FROM `items`
LEFT JOIN `user_choice` ON `user_choice`.item_id = `items`.item_id
WHERE `user_choice`.user_id=xx

当我添加这个WHERE语句时,它会过滤掉user_choice。fav为NULL(即不是1或0)的第一个语句的任何结果。即使它们是NULL,我怎么能让它返回值

示例数据:

items

item_id | ITEM_NAME

1,ITEMNAME

2,item2name

3,item3name

user_choice

user_id | item_id |最爱

1,1,1

1,3,0

1 个答案:

答案 0 :(得分:2)

0,1不被视为NULL值,因此您的WHERE语句将其排除。您需要在WHERE子句中添加另一个OR,如下所示:

SELECT *,`user_choice`.fav FROM `items`
LEFT JOIN `user_choice` ON `user_choice`.item_id = `items`.item_id
WHERE `user_choice`.user_id=xx OR `user_choice`.user_id IS NULL