从两个表中删除两列重复项,每个表上一列

时间:2013-11-05 09:58:25

标签: mysql sql join duplicates sql-delete

我有一个棘手的查询,我需要帮助,我想知道是否可以在不创建临时表的情况下执行此操作。这是交易。

我有两个表包含同一实体的信息。一个包含标识符,另一个包含有关产品的文字标签。他们使用他们的id列加入。

表1:

id    A       B 
----------------
1     12345   5  
2     123456  3       
3     12345   8   
4     12345   4 

表2:

id    C       D 
----------------
1     cable   d  
2     iphone  c       
3     cable   b   
4     brick   a 

我想要实现的是删除具有相似列 1A 2C <的重复项。 / strong>为了得到这样的东西:

表1:

id    A       B 
----------------
1     12345   5  
2     123456  3       
4     12345   4 

表2:

id    C       D 
----------------
1     cable   d  
2     iphone  c       
4     brick   a 

正如您所看到的,问题在于,一旦我从其中一个表中删除了某个项目,我将无法再识别其中一个副本。

我应该辞职以创建一个临时的参考表,还是会有一个很棒的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

我不确定你的例子是如何决定事情是否重复(除了链接你的例子中删除的行的id之外我什么都看不到),但你可以一次从多个表中删除。

例如,如果要匹配id并且表1中的A值与表2中的C值匹配,则要从两个表中删除: -

DELETE Table1, Table2 
FROM Table1 INNER JOIN Table2 
ON Table1.id = Table2.id
AND Table1.A = Table2.C

编辑 - 假设您想保留第一个并删除其他人,那么这样的事情应该可以完成: -

DELETE T1b, T2b
FROM Table1 T1a
INNER JOIN Table1 T1b
ON T1a.A = T1b.A
AND T1a.id < T1b.id
INNER JOIN Table2 T2a
ON T1a.id = T2a.id
INNER JOIN Table2 T2b
ON T1b.id = T2b.id
AND T2a.C = T2b.C