我想从表T1其中在列A和B的值具有用于在表T2中的列C和d没有匹配的元组选择的所有记录。
在MySQL的使用两列“哪里没有”我可以读取如何完成,使用形式选择A,从T1 B,其中(A,B)不在(SELECT C,d从T2),但在T-SQL失败对我造成“附近有语法错误‘’。”
所以,我该怎么办呢?
我想从表T1其中在列A和B的值具有用于在表T2中的列C和d没有匹配的元组选择的所有记录。
在MySQL的使用两列“哪里没有”我可以读取如何完成,使用形式选择A,从T1 B,其中(A,B)不在(SELECT C,d从T2),但在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对应的行。
我用它在MySQL,因为在MySQL没有“排除”的语句。
此代码:
的SQL语句:
SELECT T1.* FROM T1
WHERE CONCAT(T1.A,'Seperator', T1.B) NOT IN
(SELECT CONCAT(T2.C,'Seperator', T2.D) FROM T2)
这里是为我工作的答案的例子:
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是映射表。 我想找到的所有记录中,其中两列的组合是不是在映射表。 这个伟大的工程。 希望这可以帮助别人。