给出下一张表
成就
Achievements_user
我想提取用户没有的所有成就,我已经运行了这样的查询:
SELECT DISTINCT(achievements.id), achievements.title,
achievements.sub_title
FROM achievements
LEFT JOIN achievements_user
ON achievements.id=achievements_user.achievement_id
WHERE achievements_user.user_id != 123
OR achievements_user.user_id IS NULL但我觉得这不是个好办法。什么是最好的解决办法呢?
发布于 2016-08-22 23:21:37
您需要将具体测试(但正测试)移动到联接中,否则左侧连接将悄然变成内部连接:
SELECT achievements.id, achievements.title, achievements.sub_title
FROM achievements -- all achievements potentially returned
LEFT JOIN achievements_user ON achievements.id = achievements_user.achievement_id
AND achievements_user.user_id = 123 -- tries to join to all user's achievements
WHERE achievements_user.user_id IS NULL -- only missed joins returned你不需要DISTINCT。
https://stackoverflow.com/questions/39090099
复制相似问题