12

只是对 SQL 中的 IN 语句感到好奇。我知道我可以通过执行搜索具有一个值的多个列

'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 回答