You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中如何实现匹配指定列值对组合的行查询?

在SQL Server中实现多列组合匹配指定值对列表

方法1:SQL Server 2022+ 原生支持行值IN语法

从SQL Server 2022版本开始,已经支持你期望的简洁写法,直接用行值构造器搭配IN即可,完全匹配目标逻辑:

SELECT *
FROM [Table] t
WHERE (t.column1, t.column2) IN
  (('value1', 1),
   ('value2', 2),
   ('value3', 3));

这种写法最直观,不会出现列独立匹配导致的错误结果。

方法2:兼容旧版本(SQL Server 2016+)——VALUES子句内连接

如果你的SQL Server版本低于2022,可以用VALUES构造临时值对集合,再和原表做内连接,精准匹配指定列组合:

SELECT t.*
FROM [Table] t
INNER JOIN (
    VALUES 
        ('value1', 1),
        ('value2', 2),
        ('value3', 3)
) AS target_values(col1, col2)
    ON t.column1 = target_values.col1
    AND t.column2 = target_values.col2;

这种方式性能表现良好,值对数量较多时比一堆OR条件更易维护。

方法3:多OR条件拼接(适合值对数量少的场景)

如果需要匹配的组合数量不多,直接用OR连接每个组合的判断条件,逻辑清晰直接:

SELECT *
FROM [Table] t
WHERE 
    (t.column1 = 'value1' AND t.column2 = 1)
    OR (t.column1 = 'value2' AND t.column2 = 2)
    OR (t.column1 = 'value3' AND t.column2 = 3);

缺点是值对数量多的时候语句会冗长,维护成本高。

方法4:EXISTS子句结合VALUES

另一种兼容旧版本的写法,通过EXISTS判断当前行是否存在于目标值对集合中:

SELECT *
FROM [Table] t
WHERE EXISTS (
    SELECT 1
    FROM (
        VALUES 
            ('value1', 1),
            ('value2', 2),
            ('value3', 3)
    ) AS target_values(col1, col2)
    WHERE t.column1 = target_values.col1
      AND t.column2 = target_values.col2
);

语义上更强调“存在匹配组合”,效果和内连接一致。


内容的提问来源于stack exchange,提问作者ewok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:53:18