删除 table 中的重复行
Delete duplicate rows in a table
我编写了一个查询来查找 table 中的重复行。它输出重复的对(例如 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
现在我想在删除语句中使用此查询,这样只删除 一行对。 (即例如 row 1,2
和 row 2,1
,仅删除 1
并让 2
不删除)
您可以使用 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;
我编写了一个查询来查找 table 中的重复行。它输出重复的对(例如 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
现在我想在删除语句中使用此查询,这样只删除 一行对。 (即例如 row 1,2
和 row 2,1
,仅删除 1
并让 2
不删除)
您可以使用 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;