【问题标题】:Duplicating rows in SQL output too many valuesSQL 输出中的重复行值过多
【发布时间】:2019-03-25 13:50:45
【问题描述】:

我创建了一个查询来删除表中的重复行。我试图这样做,但输出是“太多值”

DELETE FROM Employeetest 
WHERE employeeid IN (SELECT 
                         employeetest.*, 
                         ROW_NUMBER() OVER (PARTITION BY employeeid ORDER BY employeeid) AS rownumber 
                     FROM
                         employeetest 
                     HAVING
                         (rownumber > 1)); 

我也是

SELECT
    employeetest.*, 
    ROW_NUMBER() OVER (PARTITION BY employeeid ORDER BY employeeid) AS rownumber 
FROM
    employeetest

然后

DELETE * FROM employeetest;

没有用

【问题讨论】:

标签: sql oracle sql-delete


【解决方案1】:

你标记为 plsql 我知道你的 DBOracle。所以你可以使用rowid pseudocolumn,如下所示:

delete Employeetest t1
where rowid <
(
select max(rowid)
  from Employeetest t2 
 where t2.employeeid = t1.employeeid 
);

如果目标是删除 employeeid 值的所有重复项。

附注无法以Delete * from employeetest where ... 这样的方式删除,但可以使用Delete from employeetest where ...Delete employeetest where ...

【讨论】:

  • @SarahAH 如果它有效并解决了您的问题,您可能想要投票并接受它
【解决方案2】:

我总是使用这样的东西:

delete employeetest
where  rowid in
       ( select lag(rowid) over (partition by employeeid order by null) 
         from employeetest )

【讨论】:

    【解决方案3】:

    这个逻辑通常也写成:

    delete Employeetest 
    where rowid in (select max(rowid)
                    from Employeetest e2
                    group by e2.employeeid
                   );
    

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多