Iドンの使用のようなものになるので、値を返しますCASE
@JBrooksがあなたのcase文を正しく翻訳したと思います(そして、心配なく、偽陽性を招く可能性があります)。
私は次のようにCASE
同等であると思う:
WHERE 1 = CASE
WHEN @Status <> 1
THEN CASE
WHEN (t3.Id = @SID AND sh.StatusId = 3 AND k.StatusId = 1)
THEN 1
END
ELSE CASE
WHEN t2.Id = @SID AND t2.StatusID = 12
THEN 1
END
END
私は、しかし、そのような構築物は読み、デバッグ、それが変形することができることに同意するのは難しいことに同意します。しかしながら、@ JBrooksの「好ましい方法」は論理和の正規形(すなわち、括弧を必要とする(predicate_1 OR predicate_2)
)であるが、私は結合標準形(すなわち、preidcate_1 AND preidcate_2
)を好む。
WHERE
(p.Status = 1 OR (t3.Id = p.SID AND sh.StatusId = 3 AND k.StatusId = 1))
AND
(p.Status <> 1 OR (t2.Id = p.SID AND t2.StatusID = 12))
T3から選択してT1に接続していますが、どこにT2に参加していないのですか?コードがありませんか? – Taryn
うん!!タイプミスについては申し訳ありません。私は同じことをやっているが、Parseエラーが出ている。 '='付近の構文が正しくありません。 WHEREステートメントで.. – user424134
あなたのクエリでT2に参加していますか?可能であれば、質問を編集して完全なクエリを投稿できますか? – Taryn