假设以下表格:
CREATE TABLE X (x_name VARCHAR(100));
CREATE TABLE Y (y_name VARCHAR(100));
INSERT INTO X VALUES ('blue');
INSERT INTO X VALUES ('red');
INSERT INTO Y VALUES ('blue');
导致:
+---------+ +---------+
| Table X | | Table Y |
+---------+ +---------+
| x_name | | y_name |
+---------+ +---------+
| 'blue' | | 'blue' |
| 'red' | +---------+
+---------+
以下查询的结果符合预期:
SELECT * FROM X WHERE x_name IN (SELECT y_name FROM Y);
将返回一行| 'blue' |
。SELECT * FROM X WHERE x_name NOT IN (SELECT y_name FROM Y);
将返回一行| 'red' |
。
让我们插入NULL
表 Y:
INSERT INTO Y VALUES (NULL);
第一个查询将返回相同的结果 ( blue
)。但是,上面的第二个查询将不返回任何行。为什么是这样?