使用两列的T-SQL"Where in in"

And*_*dén 19 sql t-sql

我想从表T1中选择所有记录,其中列A和B中的值对于表T2中的列C和D没有匹配的元组.

使用两列的mysql"Where not in"中,我可以阅读如何使用表单选择A,B来自T1,其中(A,B)不在(SELECT C,D从T2),但在T-SQL中失败对我来说导致"语法不正确','.".

那我该怎么做?

Tom*_*lak 32

使用相关的子查询:

  ... 
WHERE 
  NOT EXISTS (
    SELECT * FROM SecondaryTable WHERE c = FirstTable.a AND d = FirstTable.b
  )
Run Code Online (Sandbox Code Playgroud)

确保在SecondaryTable上有一个复合索引(c, d),除非该表不包含很多行.


Kir*_*rst 5

您不能使用WHERE IN类型语句执行此操作.

相反,您可以LEFT JOIN到目标表(T2)并选择T2.ID所在的位置NULL.

例如

SELECT 
    T1.*
FROM
    T1 LEFT OUTER JOIN T2
    ON T1.A = T2.C AND T1.B = T2.D
WHERE
    T2.PrimaryKey IS NULL
Run Code Online (Sandbox Code Playgroud)

只返回T1中没有T2对应行的行.