SQL Conditional WhereとConditional WHERE clause in SQL Serverに似た質問がありますが、条件が満たされない場合を除き、WHERE句がない場合と同様にすべての行を返します。SQLの条件条件は、条件が満たされない場合にすべてを返します
解決策の1つは、以下を行うことです。 <ColLetter>
と<ColValue>
は<ColLetter>
がColA
の一つ、ColB
、ColC
、又はNULL
なり、<ColValue>
はこれらの列のいずれかで表示されることができる値である(または<ColLetter>
である場合NULL
ある)する文字列の挿入、であることに留意されたいです。
SELECT ID, ColA, ColB, ColC
FROM MainTable t
WHERE (
-- <ColLetter> is not null, corresponding to a column name in MainTable
(ISNULL(<ColLetter>, 0) <> 0 AND t.<ColLetter> = <ColValue>)
OR
-- <ColLetter> is null, I want to return all rows
(ISNULL(<ColLetter>, 0) = 0 AND t.ID is not null)
)
この問題は、ID列で不要にヌルがチェックされていること(ヌルがない)であり、大きなテーブルであることが原因です。これを行うより良い方法はありますか?私はこれを読み違えていない限り
つまるところ、私はあなたが誤解していると思います。 ''は、非ID列の1つの名前になります(ヌルでない場合)。 ''は、指定された列の行に表示される値になります。 –
conor
大丈夫、はい、私はそれを得ると思います。しかし、あなたは私たちにそれらの列名を教えていないので、私は任意の名前を使用しなければなりませんでした。 (あなたはこれらが何であるかを知っていますか?)実際の名前をSQLに入れてください。 –
この質問の目的のために、私はダミーの名前を使用しましたが、実際の名前である可能性もあります。だから、列の呼び出し 'ID'があり、' ColA'という列、 'ColB'という列、' ColC'という列があります。実際にはもっと多くの列があり、それらは適切な名前(例えば 'Address')を持っています。この答えは、私が思うところではまだ誤解されています。私の説明が貧弱であれば、私の謝罪です! – conor