我想根据条件从表中删除重复的行。根据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