1. 程式人生 > >mysql的in和not in的用法(特別注意not in結果集中不能有null)

mysql的in和not in的用法(特別注意not in結果集中不能有null)

注意:
1. not in的結果集中出現null則查詢結果為null;
例如下面sql中,含有list中null值,無法正確查詢結果;

SELECT COUNT(name) FROM CVE WHERE name NOT IN ('CVE-1999-0001', 'CVE-1999-0002', NULL);
  1. 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)