WHERE 基于多列

c44*_*548 2 sql-server sql-server-2012

我正在尝试在 sql server 2012 中实现类似的功能。但是这种语法不存在。它有什么替代方案,为什么 sql server 不支持这种语法糖?

这意味着 C1 匹配 D1,C2 匹配 D2,Cn 匹配 Dn。当所有列匹配时,它只会过滤掉结果。

SELECT * FROM tableA
WHERE
   ([C1], [C2],..., [Cn]) IN (SELECT [D1], [D2],..., [Dn] FROM tableB)
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 8

您的查询是标准 SQL。不幸的是,它还没有在 SQL Server 中实现。您可以表达您对要实现的此功能的支持:Microsoft Azure 反馈:添加对 ANSI 标准行值构造函数的支持

您可以使用转换INEXISTS子查询的常用方法。仅适用于一列或多列:

SELECT * 
FROM tableA AS a
WHERE EXISTS
      ( SELECT 1 
        FROM tableB AS b
        WHERE a.[C1] = b.[D1]
          AND a.[C2] = b.[D2]
          ---
          AND a.[Cn] = b.[Dn]
      ) ; 
Run Code Online (Sandbox Code Playgroud)