1

私は次の選択クエリを作成しています:

select date(al.created_on) date, a.name appname, u.regcode rc, u.email_address ea from audit_logs al 
JOIN users u ON al.user_id = u.id
JOIN applications a ON al.application_id = a.id
group by date, appname, ea
order by date DESC, appname, ea;

「u.regcode rc」の多くの値が NULL である 900 を超える結果が得られます。

また、特定の regcode を除外し、クエリを次のように変更する必要があります。

select date(al.created_on) date, a.name appname, u.regcode rc, u.email_address ea from audit_logs al 
JOIN users u ON al.user_id = u.id
JOIN applications a ON al.application_id = a.id
WHERE u.regcode != '9999'
group by date, appname, ea
order by date DESC, appname, ea;

しかし、今では u.regcode が NULL だったすべての結果も除外されています。WHERE 句を「 WHERE u.regcode = NULL 」に変更しても、NULL 値が除外され、何も得られません。

NULL 値の行を失うことなく、u.regcode-column の特定の値を除外する方法はありますか?

4

1 に答える 1

3

null とのすべての比較は false と評価されます (または、より正確には、unknownと評価されます。つまり、 true と評価されないため、 false のように動作しますが、これらの式を使用する他のブール演算も不明と評価されます)。等式と不等式の比較。これは、把握するのが難しい SQL の側面の 1 つですが、基本null的には欠損値を表しています。SQL サーバーに関する限り、値はあるかもしれませんが、それがないため、値は不明です。値が何であるかがわからないため、他の値と等しいか、小さいか、大きいかはわかりません。

値を null と比較するには、is nullまたはを使用する必要がありますis not null

したがって、クエリには、次を使用します

where u.regcode != 9999 or u.regcode is null
于 2012-09-07T13:27:04.290 に答える