给出下一个表格
成就
Achievements_user
我想提取用户没有的所有成就,我已经运行了这样的查询:
fofo
但我认为这不是一个好方法。 对此最好的解决方案是什么?
答案 0 :(得分:1)
这将返回用户123没有的所有成就
SELECT id, title, sub_title FROM achievements
WHERE id not in
(SELECT achievement_id FROM achievements_user WHERE user_id = 123)
答案 1 :(得分:0)
您需要将具体测试(但肯定测试)向上移动到连接中,否则您的左连接将静默成为内连接:
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
。