10

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

表 A:

+------+
| BAND |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
+------+

表 B:

+------+
| HATE |
+------+
| 1    |
| 5    |
+------+

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

+------+
| BAND |
+------+
| 2    |
| 3    |
| 4    |
+------+

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

SELECT * FROM A LEFT JOIN B ON A.BAND = B.HATE WHERE B.HATE IS NULL;

编辑:上面的行已修复!请参阅下面的评论...“= NULL”与“IS NULL”。

4

4 回答 4

25

我会使用连接

select A.*
from A left join B on A.BAND = B.HATE
where B.HATE IS NULL;

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

于 2013-04-08T22:54:16.463 回答
8

您可以使用IN,但它的效率非常低:

SELECT * FROM tableA WHERE id NOT IN (SELECT id FROM tableB)
于 2013-04-08T22:47:44.813 回答
1
SELECT * FROM tableA WHERE id NOT EXISTS (SELECT DISTINCT id FROM tableB)

或者

SELECT * FROM tableA WHERE id NOT EXISTS (SELECT id FROM tableB GROUP BY id)
于 2014-02-14T15:47:00.160 回答
-3
SELECT BAND FROM A WHERE BAND NOT EXISTS(SELECT DISTINCT HATE FROM B)

或者

SELECT BAND FROM A WHERE NOT EXISTS ( SELECT HATE FROM B WHERE A.BAND = B.HATE);
于 2014-12-17T11:26:29.787 回答