MySQL中NOT IN語句對NULL值的處理


與使用in時不同:

在使用in 時:

SELECT COUNT(name) FROM CVE WHERE name NOT IN ('CVE-1999-0001', 'CVE-1999-0002'); 

SELECT COUNT(name) FROM CVE WHERE name NOT IN ('CVE-1999-0001', 'CVE-1999-0002',NULL); 

二者結果相同;

在使用not in時:

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) 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM