从表A中选择,表B中不存在

TSG*_*TSG 10 mysql select

我正在尝试为MySQL编写一个SELECT语句,它从表A中选择表B中不存在的内容.例如:

表A:

+------+
| BAND |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
+------+
Run Code Online (Sandbox Code Playgroud)

表B:

+------+
| HATE |
+------+
| 1    |
| 5    |
+------+
Run Code Online (Sandbox Code Playgroud)

因此,如果表A是所有乐队,而表B是我讨厌的乐队,那么我只想要我不讨厌的乐队.所以选择的结果应该是:

+------+
| BAND |
+------+
| 2    |
| 3    |
| 4    |
+------+
Run Code Online (Sandbox Code Playgroud)

我该如何为此写一个选择?这是我的最后一次尝试:

SELECT * FROM A LEFT JOIN B ON A.BAND = B.HATE WHERE B.HATE IS NULL;
Run Code Online (Sandbox Code Playgroud)

编辑:上面的行已经修复!请参阅下面的注释..."= NULL"与"IS NULL".

Bar*_*nka 20

我会使用加入

select A.*
from A left join B on A.BAND = B.HATE
where B.HATE IS NULL;
Run Code Online (Sandbox Code Playgroud)

请记住:为表创建适当的索引


Ste*_*her 6

你可以使用IN,但效率极低:

SELECT * FROM tableA WHERE id NOT IN (SELECT id FROM tableB)
Run Code Online (Sandbox Code Playgroud)

  • 为什么这比使用连接更好? (2认同)
  • 如果表A或B很大(对于小表,性能差异几乎没有),我认为这很慢 (2认同)
  • 我从来没有说过它更好,我实际上说的相反.`IN`很糟糕,因为它为每一行检查运行内部查询(因此,对于`tableA`中的每一行). (2认同)