我有兩個表:
如何保留外鍵在另一個表中的行並刪除其他重複的行?
A:
id code
1 A1
2 A1
3 B1
4 B1
5 C1
6 C1
=====================
B:
id Aid
1 1
2 4
(B
不含Aid
其鏈接到code C1
)
讓我解釋一下整個流程:
我想讓每一行table A
有不同的代碼(通過刪除重複的),和我はnt保留Aid
,我可以在table B
找到。如果Aid
不保存在table B
,我保留id更大一個。
,所以我不能只是做一些事情如下:
DELETE FROM A
WHERE id NOT IN (SELECT MAX(id)
FROM A
GROUP BY code,
)
我可以通過下面的SQL語句獲取每個duplicate_code_groups:
SELECT code
FROM A
GROUP BY code
HAVING COUNT(*) > 1
有SQL中的一些代碼,就像
for (var ids in duplicate_code_groups){
for (var id in ids) {
if (id in B){
return id
}
}
return max(ids)
}
並將返回ID置入idtable
??我只是不知道如何在sql中編寫這樣的代碼。
然後我可以做
DELETE FROM A
WHERE id NOT IN idtable
您的編輯更改了要求。首先,您想從A中刪除具有重複代碼的所有行(除了具有最高ID的行),現在您還想從A刪除所有行,並且只會出現一次代碼。你知道這個改變的要求嗎? –
另外:如果您的第一個DELETE語句是您想要執行的語句(但排除外鍵約束禁止刪除的行),那麼您的問題的其餘部分只是模糊處理(因爲它與第一個DELETE語句衝突)。 –
@Werner Henze讓我解釋一下總體流程:我想讓'table A'中的每一行都有不同的'code',並且我想保留'table B'中可以找到的'Aid'.If'Aid '不能保存在'表B'中,我保留這個id大一個。 – Mithril