MySQL - 提取表中存在但不存在于另一个表中的记录

时间:2014-07-29 05:45:50

标签: c# mysql

我知道这个问题已被多次询问过。 问题是其他解决方案不起作用.. 我尝试了以下方法:

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)。

1 个答案:

答案 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)