我有一个棘手的查询,我需要帮助,我想知道是否可以在不创建临时表的情况下执行此操作。这是交易。
我有两个表包含同一实体的信息。一个包含标识符,另一个包含有关产品的文字标签。他们使用他们的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
<的重复项。 / 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
正如您所看到的,问题在于,一旦我从其中一个表中删除了某个项目,我将无法再识别其中一个副本。
我应该辞职以创建一个临时的参考表,还是会有一个很棒的方法来做到这一点?
答案 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