Sql 从oracle中删除重复行
我正在使用oracle数据库。我想使用表中除一行之外的重复行,这意味着我想删除所有行,但至少应该有一行。 我有一张桌子Sql 从oracle中删除重复行,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我正在使用oracle数据库。我想使用表中除一行之外的重复行,这意味着我想删除所有行,但至少应该有一行。 我有一张桌子 employee_id ---- department_id 1 10 2 10 1 20 3 30 2 30 现在我想删除重复的行,但至少应该有一行 select count(
employee_id ---- department_id
1 10
2 10
1 20
3 30
2 30
现在我想删除重复的行,但至少应该有一行
select count(employee_id),employee_id
from employee
group by employee_id
having count(employee_id) >1));
我用它来查找多个部门的员工数量,但找不到进一步发展的方法。如果我在那里使用delete,它将删除所有副本,但我想保留一个副本。
从emp中删除
伊诺在哪里
从中选择eno
选择counteno,eno
来自雇员
依诺集团
counteno>1
编辑:我想保留员工id
任何可以进一步指导我的人都可以使用子查询删除重复的行
delete from employee a
where employee_id in (
select employee_id
from employee b
where b.department_id > a.department_id )
这里我们看到一个使用SQL删除重复表行的示例,该示例使用SQL子查询来标识重复行,并手动指定联接列:
DELETE FROM
table_name A
WHERE
a.rowid >
ANY (
SELECT
B.rowid
FROM
table_name B
WHERE
A.col1 = B.col1
AND
A.col2 = B.col2
);
使用秩删除重复的行
这是RANK函数的一个示例,用于识别和删除Oracle表中的重复行,该函数删除所有重复行,同时保留重复行的初始实例:
delete from $table_name where rowid in
(
select "rowid" from
(select "rowid", rank_n from
(select rank() over (partition by $primary_key order by rowid) rank_n, rowid as "rowid"
from $table_name
where $primary_key in
(select $primary_key from $table_name
group by $all_columns
having count(*) > 1
)
)
)
where rank_n > 1
)
Oracle最重要的功能之一是能够检测并删除表中的重复行。虽然许多Oracle DBA将主键引用完整性约束放在表上,但许多商店不使用RI,因为它们需要灵活性 使用子查询删除重复的行 这里我们看到一个使用SQL删除重复表行的示例,该示例使用SQL子查询来标识重复行,并手动指定联接列:
DELETE FROM
table_name A
WHERE
a.rowid >
ANY (
SELECT
B.rowid
FROM
table_name B
WHERE
A.col1 = B.col1
AND
A.col2 = B.col2
);
使用秩删除重复的行
这是RANK函数的一个示例,用于识别和删除Oracle表中的重复行,该函数删除所有重复行,同时保留重复行的初始实例:
delete from $table_name where rowid in
(
select "rowid" from
(select "rowid", rank_n from
(select rank() over (partition by $primary_key order by rowid) rank_n, rowid as "rowid"
from $table_name
where $primary_key in
(select $primary_key from $table_name
group by $all_columns
having count(*) > 1
)
)
)
where rank_n > 1
)
Oracle最重要的功能之一是能够检测并删除表中的重复行。虽然许多Oracle DBA将主键引用完整性约束放在表上,但许多商店不使用RI,因为它们需要灵活性 从名称中删除
其中ROWID>从名称b中选择MINROWID,其中b.name=a.name和b.age=a.age从名称a中删除
WHERE ROWID>从名称b中选择MINROWID,其中b.name=a.name和b.age=a.age@ZanShah120-您介意保留哪一行吗?你在乎员工1留在部门10还是部门20吗?@ZanShah120-这是什么意思?我相信您希望保留一行具有employee_id 1。您发布的数据中没有重复的行。有两行的员工id为1,但它们的部门id值不同。您希望保留两个部门id值中的哪一个?你总是想要最大的部门id吗?最小的?还有什么吗?@JustinCave有一个员工1,属于2个部门,因此他在表中有重复的条目,我想删除其中的任何一个entry@ZanShah120-那么,你不在乎员工id 1最终是进入部门id 10还是20?你不在乎员工id 2最终是在部门id 10还是30?可能是@ZanShah120的重复-你在乎保留哪一行吗?你在乎员工1留在部门10还是部门20吗?@ZanShah120-这是什么意思?我相信您希望保留一行具有employee_id 1。您发布的数据中没有重复的行。有两行的员工id为1,但它们的部门id值不同。您希望保留两个部门id值中的哪一个?你总是想要最大的部门id吗?最小的?还有什么吗?@JustinCave有一个员工1,属于2个部门,因此他在表中有重复的条目,我想删除其中的任何一个entry@ZanShah120-那么,你不在乎员工id 1最终是进入部门id 10还是20?你不在乎员工id 2最终是进入部门id 10还是部门id 30?许多商店的可能副本不使用RI,因为他们需要灵活性,这些商店在处理损坏的数据时不可避免地要付出代价。许多商店不使用RI,因为他们需要灵活性,而这些商店在处理损坏的数据时不可避免地要付出代价损坏的数据。