【发布时间】:2013-03-31 04:48:00
【问题描述】:
我正在尝试为 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;
编辑:上面的行已修复!请参阅下面的 cmets..."= NULL" 与 "IS NULL"。
【问题讨论】:
-
@Michelle 您的查询似乎没问题。为什么你说它不起作用?
-
在下面查看我的评论。对于其他有同样问题的人,“IS NULL”与 MySQL 中的“= NULL”不同。我尝试了一种方法并且查询有效,另一种方法返回一个空集。奇怪!!!
-
不仅在 MySQL 中,而且在任何 SQL 方言中。 SQL 中的
NULL值具有不同于任何其他值的属性,包括另一个NULL。因此,您不能指望= NULL处理 SQL 查询……您需要使用IS NULL。