たとえば、次のような列を持つテーブルがあります。
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
の反対バージョンだと思います。
私がしたいことをする簡単な方法はありますか?
IN
述語を次のように使用できます。
SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);
iNの反対のバージョンです。
いいえ、そうではありません、それはあなたが質問でしたようにOR
sを使うのと同じです。
述部IN
またはセットメンバーシップは次のように定義されます1:
Value Expression
は次のいずれかです。 2:
したがって、リテラルである値式123
を使用して、この方法でそれを行うことは問題ありません。
1、2: からの画像: SQLクエリfor Mere Mortals(R):A Hand-On Guide to Data Manipulation in SQL
(注:列が数値であると仮定します。また、連結された値が探している文字シーケンスを作成する場合、区切り文字を使用して列の値を区別します。パイプ(|)はこの区切り文字です。例)
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) + '|'
)
私は同様の問題を抱えており、このように解決しました:SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)
それが「最良の方法」かどうかはわかりませんが、私にとってはうまくいきます。
思考?