MySQLFiddle在这里:http ://sqlfiddle.com/#!2/12213/16
我有三个要处理的表。
表1:users
表(存储数据库中每个用户的数据)
表2:users_fav
表(存储将另一个用户添加为收藏的每个用户的数据)
表3:users_rated
表(存储对另一个用户进行评级的每个用户的数据)
users_fav
并在或列中users_rated
存储users.uid
进行评分或收藏的用户以及他们要添加到或的用户。users_fav.uid
users_rated.uid
users_fav.matchuid
users_rated.matchuid
我想要的最终结果:
我需要从用户表中拉出尚未被指定用户评级或收藏的所有用户。在sql小提琴数据中,试图提取结果的用户是用户ID 1,该用户具有多个其他用户,这些用户出于测试目的而受到评价和喜爱。
我已经构建了联接并尝试了一些操作,但无法获得所需的结果。这是我尝试过的方法(请在上面发布的小提琴中提供参考数据和评论)。应当假设用户标识1试图提取用户1尚未收藏或评价的所有用户:
#attempt one shows no results
SELECT users.uid, users.gender, users.username
FROM users
LEFT JOIN users_fav
ON users.uid=users_fav.matchuid
LEFT JOIN users_rated
ON users.uid=users_rated.matchuid
WHERE users.uid > 0
AND users.gender = 0
AND users_fav.uid <> 1
AND users_rated.uid <> 1
ORDER BY users.uid ASC;
这根本没有显示任何结果。我尝试将users_fav
和以及加入users_rated
表。uid
matchuid
#attempt two shows all results with gender 0
SELECT users.uid, users.gender, users.username
FROM users
LEFT JOIN users_fav
ON users.uid=users_fav.matchuid AND users_fav.uid <> 1
LEFT JOIN users_rated
ON users.uid=users_rated.matchuid AND users_rated.uid <> 1
WHERE users.uid > 0
AND users.gender = 0
ORDER BY users.uid ASC;
我尝试使用联接对第二个查询进行排除。似乎忽略了这一点,并返回了7个用户中的6个,只排除了性别为1的用户1(在查询中不包括该用户)。
任何指导表示赞赏。
谢谢。
可以工作...
SELECT users.uid, users.gender, users.username
FROM users
LEFT JOIN users_fav ON users.uid=users_fav.matchuid AND users_fav.uid = 1
LEFT JOIN users_rated ON users.uid=users_rated.matchuid AND users_rated.uid = 1
WHERE users_fav.uid IS NULL AND users_rated.uid IS NULL
这将为您提供所有未评级且不喜欢的人(最终您想要还是?)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句