You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含JOIN操作的表删除重复数据报错问题求助

解决Building表重复数据删除问题

原SQL的语法错误分析

你的SQL里存在几个明显语法错误,这是导致“command NOT PROPERLY ENDED”的原因:

  • 内层子查询select T.YEAR_MONTH,T.LOCATION,T.OWNER ORDER多了冗余的ORDER关键字,直接删掉即可。
  • JOIN的ON条件里用了逗号分隔,SQL中ON条件必须用AND来连接多个匹配条件,不能用逗号。
  • 原查询嵌套层级过多,逻辑冗余,没必要先分组筛选重复再关联,直接用ROW_NUMBER()就能定位重复数据。

正确的重复数据删除语句

假设你要保留每组重复数据中ROW_NUMBER()为1的记录,删除其余重复项,以下是简化后的正确写法(以Oracle为例,报错提示符合Oracle特征):

DELETE FROM building
WHERE ROWID IN (
    SELECT rid
    FROM (
        SELECT 
            ROWID AS rid,
            ROW_NUMBER() OVER (
                PARTITION BY YEAR_MONTH, LOCATION, OWNER 
                ORDER BY YEAR_MONTH, LOCATION, OWNER
            ) AS rn
        FROM building
        WHERE sf < 100
    )
    WHERE rn > 1
);

说明

  1. 用ROW_NUMBER()按YEAR_MONTH, LOCATION, OWNER分组,给每组内的记录编号。
  2. 通过ROWID定位要删除的记录(Oracle中唯一标识行的伪列),删除编号大于1的重复项。
  3. 如果需要调整保留的记录规则,修改ORDER BY后的字段即可(比如保留最新/最早的记录)。

如果是其他数据库(如MySQL、SQL Server),写法会略有不同,但核心逻辑一致:用窗口函数标记重复项,再删除标记为非保留项的记录。

内容的提问来源于stack exchange,提问作者M.R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:05:23