次の SQL クエリがあります。
select AuditStatusId
from dbo.ABC_AuditStatus
where coalesce(AuditFrequency, 0) <> 0
私はそれを理解するのに少し苦労しています。それは非常に単純に見えます。合体演算子が何をするかは (多かれ少なかれ) 知っていますが、意味を理解していないようです。
上記のクエリ以外の情報がわかりませんが、それは何を意味していると思いますか?
次の SQL クエリがあります。
select AuditStatusId
from dbo.ABC_AuditStatus
where coalesce(AuditFrequency, 0) <> 0
私はそれを理解するのに少し苦労しています。それは非常に単純に見えます。合体演算子が何をするかは (多かれ少なかれ) 知っていますが、意味を理解していないようです。
上記のクエリ以外の情報がわかりませんが、それは何を意味していると思いますか?
select AuditStatusId
from dbo.ABC_AuditStatus
where AuditFrequency <> 0 and AuditFrequency is not null
Coalesce を使用すると、インデックスを適切に使用してこのクエリを満たすことができないことに注意してください。
COALESCE は、カンマ区切りのリストに基づいて最初の非 NULL 値を返すことによって、NULL 値を処理する ANSI 標準関数です。これ:
WHERE COALESCE(AuditFrequency, 0) != 0
..AuditFrequency
列が NULL の場合、代わりに値をゼロに変換することを意味します。それ以外の場合は、AuditFrequency
値が返されます。
比較では、AuditFrequency
列の値がゼロの行AuditFrequency
は返されないため、NULL の行もクエリによって無視されます。
私はそれがこれによってより正確に記述されていると思います:
select AuditStatusId
from dbo.ABC_AuditStatus
where (AuditFrequency IS NOT NULL AND AuditFrequency != 0) OR 0 != 0
私は最後の部分が何もしないことを認めます、そして多分私はただ衒学者であるだけです、しかし私にとってこれはあなたの質問をより正確に説明します。
アイデアは、単一の式を使用して単一の検索条件を表現することが望ましいということですが、それは単なるスタイルであり、好みの問題です。
1 つの式:
WHERE age = COALESCE(@parameter_value, age);
2 つの式:
WHERE (
age = @parameter_value
OR
@parameter_value IS NULL
);
別の例を次に示します。
1 つの式:
WHERE age BETWEEN 18 AND 65;
2 つの式
WHERE (
age >= 18
AND
age <= 65
);
個人的には、私は単一の式に強い個人的な好みがあり、読みやすいと思います...使用されるパターンに慣れていれば;)それらのパフォーマンスが異なるかどうかは別の問題です...
null AuditFrequency をゼロとして検出し、それらの行を非表示にするように設計されているようです。
私が見る限り、0 または null ではないフィールドをチェックします。