我想根據條件從表中刪除重複的行。根據Oracle中的條件刪除重複行
例如, 表ABC:
ID Name Pin Status
111 Pope 909 New
222 Jazz 909 New
333 Volk 767 Assigned
444 Audi 767 New
555 Pink 435 New
我想刪除它具有以下條件的基礎上同「針」重複記錄:
- 如果兩個相同的PIN記錄有新的狀態 - 刪除其中的任何一個。
- 如果其中一個Pin記錄的狀態爲New,另一個記錄的狀態爲已分配 - 刪除'New'狀態記錄。
我寫了下面的SQL,但我想知道是否有更好的方法來處理這個使用PK。
爲1:
DELETE FROM ABC WHERE ID IN (
SELECT
a.id
FROM ABC a
WHERE a.rowid <
(SELECT max(rowid)
FROM ABC b
WHERE b.pin = a.pin
AND a.status = b.status
AND b.status in ('New')
)
);
爲2:
DELETE FROM ABC WHERE ID IN (
SELECT
a.id
FROM ABC a
WHERE a.rowid <
(SELECT max(rowid)
FROM ABC b
WHERE b.pin = a.pin
AND a.status <> b.status
AND a.status in ('New')
AND b.status in ('Assigned')
)
);
如果哪一個引腳分配多個和多種新行? –
如果兩行都具有與分配狀態相同的引腳 - 什麼也不做。 – Murali