sql - SQL 中的双 IN 语句

标签 sql sql-server sql-server-2008

只是对 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/

相关文章:

sql-server - JOIN 的顺序有影响吗?

sql - 确定 SQL 中事件的日期顺序(针对每个组)

sql - 事务内插入失败,但 sql server 返回 1 行受影响?

wpf - 数据读取器不兼容...成员在数据读取器中没有对应的列

sql - 列名称或提供的值的数量与表定义不匹配

mysql - 获取不同表之间的最大字段值和它来自的表

php - 如何在sql中对时间(格式)数据进行分组

sql - Transact-SQL 中是否有与 typedef 等效的东西?

sql-server - 在 SSAS 中处理多维数据集期间没有跟踪信息

java - JDBC 准备语句语法错误