1

次の SQL クエリがあります。

select AuditStatusId 
from dbo.ABC_AuditStatus 
where coalesce(AuditFrequency, 0) <> 0

私はそれを理解するのに少し苦労しています。それは非常に単純に見えます。合体演算子が何をするかは (多かれ少なかれ) 知っていますが、意味を理解していないようです。

上記のクエリ以外の情報がわかりませんが、それは何を意味していると思いますか?

4

6 に答える 6

13
select AuditStatusId 
from dbo.ABC_AuditStatus 
where AuditFrequency  <> 0 and AuditFrequency  is not null

Coalesce を使用すると、インデックスを適切に使用してこのクエリを満たすことができないことに注意してください。

于 2010-07-06T21:35:12.487 に答える
5

COALESCE は、カンマ区切りのリストに基づいて最初の非 NULL 値を返すことによって、NULL 値を処理する ANSI 標準関数です。これ:

WHERE COALESCE(AuditFrequency, 0) != 0

..AuditFrequency列が NULL の場合、代わりに値をゼロに変換することを意味します。それ以外の場合は、AuditFrequency値が返されます。

比較では、AuditFrequency列の値がゼロの行AuditFrequencyは返されないため、NULL の行もクエリによって無視されます。

于 2010-07-06T21:38:39.063 に答える
0

私はそれがこれによってより正確に記述されていると思います:

select AuditStatusId 
from dbo.ABC_AuditStatus 
where (AuditFrequency IS NOT NULL AND AuditFrequency != 0) OR 0 != 0

私は最後の部分が何もしないことを認めます、そして多分私はただ衒学者であるだけです、しかし私にとってこれはあなたの質問をより正確に説明します。

于 2010-07-06T21:43:15.480 に答える
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
      );

個人的には、私は単一の式に強い個人的な好みがあり、読みやすいと思います...使用されるパターンに慣れていれば;)それらのパフォーマンスが異なるかどうかは別の問題です...

于 2010-07-07T08:55:51.860 に答える
0

null AuditFrequency をゼロとして検出し、それらの行を非表示にするように設計されているようです。

于 2010-07-06T21:35:25.200 に答える
0

私が見る限り、0 または null ではないフィールドをチェックします。

于 2010-07-06T21:37:13.170 に答える