1
다음은 MySQL에서 어떻게 작동하는지 혼란 스럽습니다. 아래 쿼리에서 첫 번째 SELECT
은 table2
에서 모든 행을 반환하고 두 번째 SELECT
은 행을 반환하지 않습니다. NULL
이 NOT IN
연산자와 함께 작동하는 방식에 대한 설명이 있습니까? 이것을 설명하는 문서가 있습니까?하위 쿼리가 NULL 값으로 작동하지 않는 이유는 무엇입니까?
CREATE TABLE table1 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE table2 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
table1_id INT UNSIGNED,
PRIMARY KEY (id)
);
INSERT INTO table2 (id, table1_id) VALUES (1, NULL);
SELECT COUNT(*) FROM table2 WHERE table1_id NOT IN (SELECT id FROM table1);
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
INSERT INTO table1 (id) VALUES (1);
SELECT COUNT(*) FROM table2 WHERE table1_id NOT IN (SELECT id FROM table1);
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
하위 쿼리에'id is not null '을 추가하여 작동하게 할 수 있습니다. – Bohemian
@ 보헤미안 - 물론. 그러나 OP는 특히 IN 절의 NULL이 결과를 반환하지 않는 이유를 묻고 있습니다. – Thomas