mysql的in和not in的用法(特別注意not in結果集中不能有null)
阿新 • • 發佈:2019-02-06
注意:
1. not in的結果集中出現null則查詢結果為null;
例如下面sql中,含有list中null值,無法正確查詢結果;
SELECT COUNT(name) FROM CVE WHERE name NOT IN ('CVE-1999-0001', 'CVE-1999-0002', NULL);
- in結果集有null不影響;
=====================案例==========================
mysql> SELECT COUNT(name) FROM CVE WHERE name NOT IN (‘CVE-1999-0001’, ‘CVE-1999-0002’);
+————-+
| count(name) |
+————-+
| 17629 |
+————-+
1 row in set (0.02 sec)
mysql> SELECT COUNT(name) FROM CVE WHERE name NOT IN (‘CVE-1999-0001’, ‘CVE-1999-0002’, NULL);
+————-+
| count(name) |
+————-+
| 0 |
+————-+
1 row in set (0.01 sec)
當在子查詢中出現NULL的時候,結果就一定是0了。查了一下手冊,確實有這樣的說法。所以最後實際採用了這樣的查詢:
SELECT COUNT(DISTINCT name)
FROM CVE
WHERE name NOT IN (SELECT cveID FROM cve_sig WHERE cveID IS NOT NULL)