我到处寻找这个,但我似乎无法找到解决方案。也许我使用的是错误的条款。无论哪种方式,我都转向'可靠的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尚未安装的工具?
如果这很痛苦,我很抱歉,但我似乎无法弄明白!谢谢你的帮助!
答案 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