只是对 SQL 中的 IN 语句感到好奇。 我知道我可以通过执行以下操作来搜索具有一个值的多个列
'val1' IN (col1,col2)
并且可以在一列中搜索多个值
col1 IN ('val1','val2')
但是有没有一种方法可以同时执行这两个操作,而无需恢复到 SQl 中重复的 AND/OR?我希望以最可扩展的方式执行此操作,因此与我需要搜索的值/列数无关。 所以本质上是:
('val1','val2') IN (col1,col2)
但有效。
最佳答案
你可以这样做 (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
)
当然,有人可能会争论哪个版本更简洁。
关于sql - SQL 中的双 IN 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235382/