为什么在SQLite中排除行的WHERE子句不能按预期工作?

Sil*_*611 2 sql sqlite

我试图排除一个名单列表

我有桌子 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和擦除,因为他们的名字的线条MichaelTorben

秒查询是:

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)

我究竟做错了什么?

Gor*_*off 5

如果你打算使用a join(而不是not innot exists),你需要一个left joinwhere子句:

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子句中使用逗号.