我想从表T1中选择所有记录,其中A列和B列中的值与表T2中的列C和D没有匹配的元组。
在mysql “Where not in” using two columns我可以阅读如何使用从T1中选择A,B的形式来实现这一点,其中(A,B)不在(SELECT C,D从T2),但在T-SQL中失败我导致“语法不正确','。”。
那我该怎么做?
答案 0 :(得分:28)
使用相关的子查询:
...
WHERE
NOT EXISTS (
SELECT * FROM SecondaryTable WHERE c = FirstTable.a AND d = FirstTable.b
)
确保SecondaryTable上的复合索引超过(c, d)
,除非该表不包含很多行。
答案 1 :(得分: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
只返回T1中没有T2对应行的行。
答案 2 :(得分:1)
我在Mysql中使用它,因为在Mysql中没有' t" EXCLUDE"言。
此代码:
的SQL语句:
SELECT T1.* FROM T1
WHERE CONCAT(T1.A,'Seperator', T1.B) NOT IN
(SELECT CONCAT(T2.C,'Seperator', T2.D) FROM T2)
答案 3 :(得分:0)
以下是对我有用的答案示例:
SELECT Count(1)
FROM LCSource as s
JOIN FileTransaction as t
ON s.TrackingNumber = t.TrackingNumber
WHERE NOT EXISTS (
SELECT * FROM LCSourceFileTransaction
WHERE [LCSourceID] = s.[LCSourceID] AND [FileTransactionID] = t.[FileTransactionID]
)
您会看到LCSourceFileTransaction中都存在两列,但LCSource中出现一列,而FileTransaction中出现一列,并且LCSourceFileTransaction是映射表。我想查找映射表中没有这两列组合的所有记录。这很好。希望这对某人有帮助。