50

たとえば、次のような列を持つテーブルがあります。

id,col1,col2,col3,col4

ここで、渡された値があるかどうかANYを確認します。col1, col2, col3, col4

それを行うには長い道のりがあります。

SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);

の反対のバージョンだと思いINます。

私がやりたいことをする簡単な方法はありますか?

4

3 に答える 3

128

IN次のように、述語を使用できます。

SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);

SQLフィドルデモ


INの反対のバージョンです。

いいえ、そうではありませんOR。質問で行った方法でsを使用するのと同じです。


これを明確にするには:

述語またはセットのメンバーシップは1INとして定義されます:

ここに画像の説明を入力してください

どちらValue Expressionでもかまいません2

ここに画像の説明を入力してください

123したがって、リテラルである値式を使用して、このように行うのは問題ありません。


1、2:画像:Mere Mortals(R)のSQLクエリ:SQLでのデータ操作の実践ガイド

于 2012-12-17T14:52:07.060 に答える
2

次のようなことができます:(注:列が数値であると仮定します。また、連結された値が目的の文字シーケンスを作成する場合に備えて、区切り文字を使用して列の値を区別します。パイプ(|)はこの区切り文字です。例。)

SELECT [ID]
    ,[Col1]
    ,[Col2]
    ,[Col3]
    ,[Col4]
FROM [Table1]
WHERE '123' IN (
    CAST([Col1] AS VARCHAR) + '|'
    + CAST([Col2] AS VARCHAR) + '|'
    + CAST([Col3] AS VARCHAR) + '|'
    + CAST([Col4] AS VARCHAR) + '|'
)
于 2015-06-29T15:33:14.167 に答える
1

私は同様の問題を抱えていて、次のように解決しました。SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)

それが「最善の方法」であるかどうかはわかりませんが、私にとってはうまくいきます。

考え?

于 2014-07-01T13:19:46.610 に答える