我有一张桌子
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
答案 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)