35

これは、MySQL のテーブル結合に関する最後の質問へのフォローアップの質問です。

左の結合テーブルから NULL 値を選択できるようにする必要があります。

ここに私の参加があります:

table1.id | table1.name | table2.id | table2.surname
        1 |        John |         1 |            Doe
        2 |     Michael |         2 |       Anderson
        3 |        Anna |      NULL |           NULL
        4 |         Sue |      NULL |           NULL

したいのですselect WHERE table2.surname = NULLが、次のようなクエリは機能しません。

SELECT table1.*,table2.*
FROM table1
LEFT JOIN table2
    ON table1.id=table2.id
WHERE table2.surname=NULL

結果が得られない背後にあるロジックをある程度理解できますが、結果を取得する方法が必要ですか?

どんな助けにも感謝します。

4

4 に答える 4

46

値を比較するには、次のように述語NULLを使用する必要があります。IS NULL

SELECT table1.*, table2.*
FROM table1
LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.surname IS NULL
于 2012-07-16T07:54:43.733 に答える
13

IS NULL代わりに使用する必要があります= NULL

WHERE table2.surname IS NULL

単純に実行できない理由= NULLは、NULL本質的に「不明」であり、何か (それ自体でさえも) と等しい等しくないためです。したがって、完全に一致するはずの何かと比較しようとしますNULL期待されるブール値0またはの代わりに単純に返され1ます。それがまさに、クエリが空の結果を返していた理由です。

「不明」不明」には明確な違いがあります。何か不明であるかどうかは確かにテストできますが、不明が不明であるため、何かが「等しい」かどうかをテストすることはできず、意味がありません。

また、MySQL を使用しているため、MySQL 固有の NULL セーフ比較演算子である を使用する別のオプションもありますが、それを使用しないようにして、標準の SQL の方法 ( / ) に固執しtable2.surname <=> NULLてください。<=>IS NULLIS NOT NULL

于 2012-07-16T07:54:57.407 に答える
4

試してみてください:

SELECT table1.*,table2.* 
FROM table1 
  LEFT JOIN table2 ON table1.id=table2.id 
WHERE table2.surname IS NULL
于 2012-07-16T07:54:50.417 に答える
1

MySQL の仕様によれば、「= NULL」の代わりに「IS NULL」を使用する必要があります。「(NULL = NULL)はNULLに等しい」と言っています。ただし、ブール値として使用されている間は、NULL は False と等しくなります。

于 2013-03-05T03:08:19.500 に答える