我到处寻找这个,但我似乎无法找到解决方案.也许我使用的是错误的条款.无论哪种方式,我都转向善于"信任",以帮助我找到答案.
我有两张桌子,我们称之为'工具'和'安装'
tools = id, name, version
installs = id, tool_id, user_id
Run Code Online (Sandbox Code Playgroud)
"工具"表记录了可用的工具,然后由用户安装并记录在"安装"表中.选择已安装的工具非常简单:
SELECT tools.name
FROM tools
LEFT JOIN installs
ON tools.id = installs.tool_id
WHERE user_id = 99 ;
Run Code Online (Sandbox Code Playgroud)
如何选择剩余的工具 - 用户#99尚未安装的工具?
如果这很痛苦,我很抱歉,但我似乎无法弄明白!谢谢您的帮助!
使用:
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
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用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)
Run Code Online (Sandbox Code Playgroud)
......或者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)
Run Code Online (Sandbox Code Playgroud)
在这三个选项中,LEFT JOIN/IS NULLMySQL的效率最高. 您可以在本文中阅读更多相关信息.
| 归档时间: |
|
| 查看次数: |
1071 次 |
| 最近记录: |