web-dev-qa-db-ja.com

1つの値の複数の列を確認する

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

id,col1,col2,col3,col4

さて、ANY of col1, col2, col3, col4に値が渡されます。

それを行うには長い道のりです。

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

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

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

39
Brett

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

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

SQL Fiddle Demo


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

いいえ、そうではありません、それはあなたが質問でしたようにORsを使うのと同じです。


これを明確にするには:

述部INまたはセットメンバーシップは次のように定義されます1

enter image description here

Value Expressionは次のいずれかです。 2

enter image description here

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


1、2: からの画像: SQLクエリfor Mere Mortals(R):A Hand-On Guide to Data Manipulation in SQL

99
Mahmoud Gamal

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

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) + '|'
)
2

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

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

思考?

1
Milk Man