我有一个棘手的查询需要帮助,我想知道是否可以在不创建临时表的情况下完成它。这是交易。
我有两个表,其中包含同一实体的信息。一个包含标识符,另一个包含有关产品的文字标签。它们通过 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
.A
和2
.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/