简单查询提取用户没有的所有成就(一对多)

时间:2016-08-22 23:13:43

标签: mysql foreign-keys one-to-many

给出下一个表格

成就

  • ID
  • 标题
  • sub_title
  • 描述

Achievements_user

  • id
  • achievement_id
  • USER_ID

我想提取用户没有的所有成就,我已经运行了这样的查询:

fofo

但我认为这不是一个好方法。 对此最好的解决方案是什么?

2 个答案:

答案 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