我知道这个问题已被多次询问过。 问题是其他解决方案不起作用.. 我尝试了以下方法:
SELECT ID FROM TABLE_1 AS T1 WHERE NOT EXISTS (SELECT COLUMN_1,COLUMN_2 FROM TABLE_2 AS T2 WHERE T1.COLUMN_1 = T2.COLUMNS_1 AND T1.COLUMN_2 = T2.COLUMN_2);
它总是处于超时状态,无论是来自Workbench还是来自代码(我使用的是Visual Studio 2013 C#)。 我不知道如何使查询更容易,以使其工作..也许拆分为2 ..
示例:
Table 1 Table 2
ID COLUMN_1 COLUMN_2 ID COLUMN_1 COLUMN_2
1 0 1 1 0 1
2 0 1 2 0 1
3 0 1 3 0 1
4 1 2
5 1 2
6 1 2
它应该返回
1 2
或者也只是ID(2)。
答案 0 :(得分:2)
SELECT
Table_1.ID
,Table_1.COLUMN_1
,Table_1.COLUMN_2
FROM Table_1
LEFT JOIN Table_2
ON Table_1.ID = Table_2.ID
AND Table_1.COLUMN_1 = Table_2.COLUMN_1
AND Table_1.COLUMN_2 = Table_2.COLUMN_2
WHERE Table_2.ID IS NULL
修改强>
好吧,如果你不需要匹配id,那就简单地说:
SELECT
Table_1.ID
,Table_1.COLUMN_1
,Table_1.COLUMN_2
FROM Table_1
LEFT JOIN Table_2
ON Table_2.COLUMN_1 = Table_1.COLUMN_1
AND Table_2.COLUMN_2 = Table_1.COLUMN_2
WHERE Table_2.ID IS NULL
如果这仍然太慢,也许索引可以提供帮助。 如果索引没有帮助,您仍然可以增加命令timeout。
不过,另一种选择是:
SELECT
Table_1.ID
,Table_1.COLUMN_1
,Table_1.COLUMN_2
FROM Table_1
WHERE
(COLUMN_1, COLUMN_2) NOT IN (SELECT COLUMN_1, COLUMN_2 FROM Table_2)