MySQL:选择剩余的行

时间:2010-03-18 22:41:12

标签: sql mysql join

我到处寻找这个,但我似乎无法找到解决方案。也许我使用的是错误的条款。无论哪种方式,我都转向'可靠的S.O.帮助我找到答案。

我有两张桌子,我们称之为“工具”和“安装”

tools = id, name, version
installs = id, tool_id, user_id

“工具”表记录可用工具,然后由用户安装并记录在“安装”表中。选择已安装的工具非常简单:

SELECT tools.name
  FROM tools
  LEFT JOIN installs
  ON tools.id = installs.tool_id
  WHERE user_id = 99 ;

如何选择剩余的工具 - 用户#99尚未安装的工具?

如果这很痛苦,我很抱歉,但我似乎无法弄明白!谢谢你的帮助!

1 个答案:

答案 0 :(得分:6)

使用:

   SELECT t.name
     FROM TOOLS t
LEFT JOIN INSTALLS i ON i.tool_id = t.id
                    AND i.user_id = 99
    WHERE i.id IS NULL

或者,您可以使用NOT EXISTS

SELECT t.name
  FROM TOOLS t
 WHERE NOT EXISTS(SELECT NULL 
                    FROM INSTALLS i
                   WHERE i.tool_id = t.id
                     AND i.user_id = 99)

...或NOT IN

SELECT t.name
  FROM TOOLS t
 WHERE t.id NOT IN (SELECT i.tool_id
                      FROM INSTALLS i
                     WHERE i.user_id = 99)

在三个选项中,LEFT JOIN/IS NULL在MySQL上效率最高。 You can read more about it in this article