mysqlのinとnot inの使い方(特にnot in結果セットにnullがないことに注意)

1248 ワード

注意: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)