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

标签 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 

我想要实现的是删除具有相似列的重复项1.A2.C 为了得到这样的东西:

表 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 

正如您所看到的,问题是,一旦我从其中一个表中删除了一个项目,我将无法再识别另一个表中的重复项。

我应该辞职去创建一个临时引用表,还是有一个很棒的方法来做到这一点?

最佳答案

从你的例子中我不确定你如何决定那里的东西是否重复(除了链接你的例子中删除的行的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

关于mysql - 从两个表中删除两列重复项,每个表上一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19786168/

相关文章:

mysql - 为什么我尝试使用 Perl 的 DBD::mysql 时会出现错误?

mysql - 在 mysql 查询中传递字符串参数时没有输出

mysql - 使用表对列执行多个 REPLACE 调用

mysql - 在相互引用的表中使用外键的正确方法是什么

sql - 将存储过程和 SQL 查询合并为一个 SQL 语句

php - 如何将排名中的下一行获取到 "rank of last id"?

java - 如何有效地应用数据库中巨大列表的多个位置变化?

php - 使用 group by condition 使结果唯一

MySQL 查询 : Multiple joins on the same field returning multiple categories - HOW?

php - Mysql表连接2个表