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)