我编写了一个查询来查找表中的重复行。它会输出重复对(例如row: 1,2
之后,您会发现row: 2,1
)
SELECT m1.ID, m2.ID
FROM AccessLog_Manual m1
INNER JOIN AccessLog_Manual m2 ON
m1.ACCESS = m2.ACCESS AND
m1.EMPLOYEEID = m2.EMPLOYEEID AND
m1.LOGDATETIME = m2.LOGDATETIME AND
m1.MORPHOACCESSID = m2.MORPHOACCESSID AND
m1.ID <> m2.ID
ORDER BY m1.ID
现在我想在delete语句中使用此查询,这样只删除 一行对。 (例如row 1,2
和row 2,1
,只删除1
并让2
未删除)
答案 0 :(得分:0)
您可以使用row_number()
为您认为重复的行分配数字。大于1的数字表示该行是重复的。
例如:
; with numbered as
(
select row_number() over (
partition by ACCESS, EMPOYEEID, LOGDATETIME, MORPHOACCESSID
order by ID) as rn
, *
from AccessLog_Manual
)
delete numbered
where rn > 1;