12

SQL の IN ステートメントに興味があります。次のようにして、1つの値で複数の列を検索できることを知っています

'val1' IN (col1,col2)

複数の値の列を検索できます

col1 IN ('val1','val2')   

しかし、SQl で繰り返し AND / OR に戻すことなく、これらの両方を同時に行う方法はありますか? 私はこれを最もスケーラブルな方法で行うことを検討しているので、検索する必要がある vals / cols の数とは関係ありません。基本的には:

('val1','val2') IN (col1,col2)

しかし有効です。

4

2 に答える 2

4

あなたはこのようなことをすることができます(私はSQLFiddleにも入れました)

-- Test data:
WITH t(col1, col2) AS (
    SELECT 'val1', 'valX' UNION ALL
    SELECT 'valY', 'valZ'
)
-- Solution:
SELECT *
FROM t
WHERE EXISTS (
    SELECT 1
    -- Join all columns with all values to see if any column matches any value
    FROM (VALUES(t.col1),(t.col2)) t1(col)
    JOIN (VALUES('val1'),('val2')) t2(val)
    ON col = val
)

もちろん、どちらのバージョンがより簡潔であるかについて議論することもできます。

于 2012-11-05T15:43:40.600 に答える
0

はい、たとえば、Oracle でこれを行うことができます。

select x, y from (select 1 as x, 2 as y from dual)
where (x,y) in (select 1 as p, 2 as q from dual)
于 2012-11-05T15:45:38.607 に答える