假设我们有以下SQL查询返回重复的电子邮件
EraseMemory:
str r0, [r1]
add r1, r1, #4
add r2, r2, #1
cmp r2, #64 @ 256 / 4 = 64
bxeq lr @ This loop should run 64 times to erase all 256 bytes of memory that were used
bal EraseMemory
在上面的例子中,我们如何实际删除那些重复的行?或者只有一个重复项,以便它们不再重复?
答案 0 :(得分:3)
一种方法使用ctid
:
delete from users
where ctid not in (select min(ctid)
from users
group by email
);
这会删除每封电子邮件除一行外的所有内容。 ctid
是内部行标识符。最好使用用户定义的主键列。
答案 1 :(得分:2)
即使您没有主键或唯一标识符,下面的此方法也允许您从表中删除记录。
WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY email ORDER BY email) AS RN
FROM users
)
DELETE FROM CTE WHERE RN > 1