对SQL中的IN语句感到好奇。 我知道我可以通过
搜索具有一个值的多个列'val1' IN (col1,col2)
可以在列中搜索多个值
col1 IN ('val1','val2')
但有没有办法同时完成这两个方面,而无需重新调整SQl中的重复AND / OR?我希望以最具扩展性的方式做到这一点,因此无需我需要搜索多少个val / cols。 基本上是这样的:
('val1','val2') IN (col1,col2)
但有效。
答案 0 :(得分:4)
你可以做这样的事情(which I've also put on 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
)
当然,有人可能会说,哪个版本更简洁。
答案 1 :(得分: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)