SQL中的双IN语句

Bea*_*ron 12 sql sql-server sql-server-2008

只是好奇SQL中的IN语句.我知道我可以通过一个值搜索多个列

'val1' IN (col1,col2)
Run Code Online (Sandbox Code Playgroud)

并且可以在列中搜索多个值

col1 IN ('val1','val2')   
Run Code Online (Sandbox Code Playgroud)

但有没有办法同时完成这两个方面,而无需重新调整SQl中的重复AND/OR?我希望以最具扩展性的方式做到这一点,因此无需我需要搜索多少个val/cols.所以基本上:

('val1','val2') IN (col1,col2)
Run Code Online (Sandbox Code Playgroud)

但有效.

Luk*_*der 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
)
Run Code Online (Sandbox Code Playgroud)

当然,有人可能会争论哪个版本更简洁。