重复数据的删除逻辑抛出 ORA-00913:值太多

Delete logic for duplicate data is throwing ORA-00913: too many values

我正在尝试使用下面的 SQL 逻辑对包含重复值的 table 执行删除,但是 oracle 抛出 ORA-00913:执行时出现太多值错误。

DELETE
FROM
  UT_USER
WHERE
  ROWID NOT IN
  (
    SELECT
      MAX(ROWID),
      USER_NAME,
      MODULE,
      EFF_BEGIN_DT,
      EFF_END_DT,
      STATUS,
      EDW_CREATE_DATE_TIME,
      EDW_UPDATE_DATE_TIME,
      EDW_CREATED_BY,
      EDW_UPDATED_BY,
      EDW_UPDATE_NOTE
    FROM
      UT_USER
    GROUP BY
      USER_NAME,
      MODULE,
      EFF_BEGIN_DT,
      EFF_END_DT,
      STATUS,
      EDW_CREATE_DATE_TIME,
      EDW_UPDATE_DATE_TIME,
      EDW_CREATED_BY,
      EDW_UPDATED_BY,
      EDW_UPDATE_NOTE
  ) ;

SELECT 声明在您的 NOT IN return 中有几列。它必须 return 正好是一列才有效(因此出现错误)。幸运的是,看起来您可以删除您选择的额外列

DELETE
FROM
  UT_USER
WHERE
  ROWID NOT IN
  (
    SELECT
      MAX(ROWID)
    FROM
      UT_USER
    GROUP BY
      USER_NAME,
      MODULE,
      EFF_BEGIN_DT,
      EFF_END_DT,
      STATUS,
      EDW_CREATE_DATE_TIME,
      EDW_UPDATE_DATE_TIME,
      EDW_CREATED_BY,
      EDW_UPDATED_BY,
      EDW_UPDATE_NOTE
  ) ;