我想从表T1中选择所有记录,其中列A和B中的值对于表T2中的列C和D没有匹配的元组。T-SQL“哪里不在”使用两列
在mysql “Where not in” using two columns我可以阅读如何使用表单选择A,B从T1(A,B)不在(SELECT C,D从T2)中选择A,B,但在T-SQL中失败,导致我“语法不正确”,“。”。
那么我该如何做到这一点?
我想从表T1中选择所有记录,其中列A和B中的值对于表T2中的列C和D没有匹配的元组。T-SQL“哪里不在”使用两列
在mysql “Where not in” using two columns我可以阅读如何使用表单选择A,B从T1(A,B)不在(SELECT C,D从T2)中选择A,B,但在T-SQL中失败,导致我“语法不正确”,“。”。
那么我该如何做到这一点?
使用相关子查询:
...
WHERE
NOT EXISTS (
SELECT * FROM SecondaryTable WHERE c = FirstTable.a AND d = FirstTable.b
)
确保有上SecondaryTable复合指数超过(c, d)
,除非该表不包含许多行。
您不能使用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
将只返回T1行不具有在T2对应的行。
我不知道我的理解,但Tomalak似乎给了我一个答案!不过谢谢! – 2012-07-30 07:22:43
我在Mysql中使用它,因为在Mysql中没有“EXCLUDE”语句。
此代码:
的SQL语句:
SELECT T1.* FROM T1
WHERE CONCAT(T1.A,'Seperator', T1.B) NOT IN
(SELECT CONCAT(T2.C,'Seperator', T2.D) FROM T2)
你能解释为什么这个说法回答这个问题吗? – 2016-08-08 05:28:36
FH-Inway:我在代码之前写下注释。 – 2016-08-08 12:55:54
谢谢。你能否看看你的第一句话,我不确定你想说什么。问题是关于T-SQL,因为MySQL不支持'WHERE NOT IN'。 – 2016-08-08 15:49:55
这是一个外观极好的选择! – RolandoCC 2015-05-11 13:50:31
不起作用。 FirstTable没有在第二个SELECT中声明。 – 2016-08-07 23:08:25