MySQL加入查询麻烦

时间:2016-11-24 12:54:39

标签: mysql sql

我有一张桌子

user(uid(pk),username), swipe(swipeId(pk), user_uid(fk), hasSwipedUid)

查询

select * from user 
left join swipe on swipe.user_userId = user.userId
where hasSwiped_userId = 1 
 or hasSwiped_userId is null 

此查询返回所需的结果但是当用户滑动不再为NULL时,它不会出现在列表中,因为该用户已刷过其他人而不是uid 1.

我希望所有尚未刷过我的用户,或所有刷过我的用户或未刷过任何人的用户。问题是,如果例如用户2已经刷过用户10然后用户1(在这种情况下将是你的设备),那么将出现具有2和10的行而不是具有1的行。

 uid, username, user_uId, hasSwiped_userId
4   A   4   1
2   B   2   1
3   D   3   9   <---- here we assume that uid 3 swiped uid 9 before uid 1 and therefore it shows up instead of 1 which is me(the user)
5   E   5   NULL

1 个答案:

答案 0 :(得分:0)

您的查询会选择用户表格中滑动表中包含条目的所有用户,因为所有可能的值都有 where 子句 hasSwipedUid ,其中包括: 1,!1或null 。假设每次用户滑动另一个用户时刷卡表都保存条目,该查询将列出至少刷过一次的所有用户。

您可能会获得 2 10 但不包含 1 的行,因为 2 10 已经刷过一次,但 1 还没有刷过任何人。

我认为你的查询应该是:

select distinct * from user inner join swipe on user.uid = swipe.user_uid
and (hasSwipedUid = 1 or hasSwipedUid = null)