Sql 有人能把我推到正确的方向吗
下面我的代码用于删除重复条目 错误:Sql 有人能把我推到正确的方向吗,sql,oracle,analytical,oracle11gr1,Sql,Oracle,Analytical,Oracle11gr1,下面我的代码用于删除重复条目 错误: 不能从CTE中删除 如果是关于从员工详细信息2中删除,请查看这是否有帮助: delete from employee_details2 a where a.rowid > (select min(b.rowid) from employee_details2 b where b.empid = a.empid ); 若你们想用你们所说的行号来删除行,是
不能从CTE中删除 如果是关于从员工详细信息2中删除,请查看这是否有帮助:
delete from employee_details2 a
where a.rowid > (select min(b.rowid)
from employee_details2 b
where b.empid = a.empid
);
若你们想用你们所说的行号来删除行,是的,你们可以这样做,但我最初的建议更简单更好
删除不能与CTE一起使用,您需要分离删除逻辑并选择如下:
delete from employee_Details2
where rowid in
(select rowid from
( select a.rowid, a.*,
row_number() over(partition by emp_id order by emp_id) as Row_number
from employee_Details2 a )
where Row_number = 2)
非常感谢您提供的这些信息,我一定会尝试一下,但是我们不能只使用行号删除行吗?不客气。好的,是的-你可以用行号来做;我编辑了我的答案并添加了这样一个例子。看一看。非常感谢这些信息,我一定会尝试一下,但是我们不能只使用行号删除行吗?是的,伙计我在youtube上看到了一个视频,带有相同的查询,他试图使用cte simple和是的,伙计我们不能用内联视图删除另一个选项吗?我在youtube上看到了一个视频,带有相同的查询。这是Oracle的演示吗?与Oracle相比,其他一些数据库(如SQL Server)在DML语句方面具有更大的灵活性。请解释您正在尝试做什么。请注意,此处通常以Please halp me的形式关闭模糊标题,因为该问题不够清晰,或者需要一个详细的说明。
delete from employee_details2 a
where a.rowid > (select min(b.rowid)
from employee_details2 b
where b.empid = a.empid
);
SQL> select * From test order by deptno;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
7782 CLARK MANAGER 7839 06/09/1981 2450 10
7839 KING PRESIDENT 11/17/1981 10000 10
7934 MILLER CLERK 7782 01/23/1982 1300 10
7566 JONES MANAGER 7839 04/02/1981 2975 20
7902 FORD ANALYST 7566 12/03/1981 3000 20
7876 ADAMS CLERK 7788 01/12/1983 1300 20
7369 SMITH CLERK 7902 12/17/1980 920 20
7788 SCOTT ANALYST 7566 12/09/1982 3000 20
7521 WARD SALESMAN 7698 02/22/1981 1250 500 30
7844 TURNER SALESMAN 7698 09/08/1981 1500 0 30
7499 ALLEN SALESMAN 7698 02/20/1981 1600 300 30
7900 JAMES CLERK 7698 12/03/1981 950 30
7698 BLAKE MANAGER 7839 05/01/1981 2850 30
7654 MARTIN SALESMAN 7698 09/28/1981 1250 1400 30
14 rows selected.
SQL> delete from test b
2 where b.empno in (select c.empno
3 from (select a.empno, row_number() over (partition by a.deptno order by a.empno) rn
4 from test a
5 ) c
6 where c.rn > 1
7 );
11 rows deleted.
SQL> select * From test order by deptno;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
7782 CLARK MANAGER 7839 06/09/1981 2450 10
7369 SMITH CLERK 7902 12/17/1980 920 20
7499 ALLEN SALESMAN 7698 02/20/1981 1600 300 30
SQL>
delete from employee_Details2
where rowid in
(select rowid from
( select a.rowid, a.*,
row_number() over(partition by emp_id order by emp_id) as Row_number
from employee_Details2 a )
where Row_number = 2)