我试图排除一个名单列表
我有桌子 Names
id| Name | Surname
---------------------
1 | Michael | Kane
2 | Torben | Dane
3 | Dinge | Chain
4 | Django | Fain
5 | Juliett | Bravo
Run Code Online (Sandbox Code Playgroud)
我有桌子 Excludes
id| Name
-----------
1 | Michael
2 | Torben
Run Code Online (Sandbox Code Playgroud)
现在我有两个问题:
SELECT * From Names, Excludes
WHERE Names.Name = Excludes.Name
GROUP BY Names.Name
Run Code Online (Sandbox Code Playgroud)
结果
id | Name | Surname | id | Name
--------------------------------
1 | Michael | Kane | 1 |Michael
2 | Torben | Dane | 2 |Torben
Run Code Online (Sandbox Code Playgroud)
现在,我想要做具有正好相反的!=做实际purpouse和擦除,因为他们的名字的线条Michael和Torben它
秒查询是:
SELECT * From Names, Excludes
WHERE Names.Name != Excludes.Name
GROUP BY Names.Name
Run Code Online (Sandbox Code Playgroud)
结果是
id | Name | Surname | id | Name
--------------------------------
3 | Dinge | Chain | 2 |Torben
4 | Django | Fain | 2 |Torben
5 | Juliett | Bravo | 2 |Torben
1 | Michael | Kane | 2 |Torben
2 | Torben | Dane | 1 |Michael
Run Code Online (Sandbox Code Playgroud)
我想要的结果是
id| Name | Surname
---------------------
3 | Dinge | Chain
4 | Django | Fain
5 | Juliett | Bravo
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
如果你打算使用a join(而不是not in或not exists),你需要一个left join和where子句:
SELECT n.*
From Names n LEFT JOIN
Excludes e
ON n.Name = e.Name
WHERE e.Name IS NULL;
Run Code Online (Sandbox Code Playgroud)
一个简单的规则: 永远不要在FROM子句中使用逗号.
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |