You need to enable JavaScript to run this app. PostgreSQL指定id删除单条重复行遇DELETE禁用LIMIT解决方案问询
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL指定id删除单条重复行遇DELETE禁用LIMIT解决方案问询

问题分析
  • 你贴出的SQL首先存在语法错误:子查询末尾多余了一个分号,会直接导致执行失败,需要先删除该分号。
  • 你需要仅针对指定id删除重复行,只要在外层DELETE的筛选条件中追加id过滤,就能实现双重校验避免误删其他id的行。
调整后可运行的SQL

如果你需要的是保留每一组(id、lot、expiration_date)最新的扫描记录,删除旧的重复行,参考写法如下:

DELETE FROM allergen_list 
WHERE id = 'F284' -- 外层追加id过滤,避免误删
  AND date_scanned IN (
    WITH cte AS (
        SELECT date_scanned, 
               row_number() OVER(PARTITION BY id, lot, expiration_date ORDER BY date_scanned DESC) as rn
        FROM allergen_list 
        WHERE id = 'F284'
    )
    SELECT date_scanned FROM cte WHERE rn > 1 -- 若要删除最新的重复行,改回rn=1即可
);
更优写法(推荐)

PostgreSQL支持直接在CTE中定位待删除行,用内置唯一行标识ctid查询性能更优,写法如下:

WITH cte AS (
    SELECT ctid,
           row_number() OVER(PARTITION BY id, lot, expiration_date ORDER BY date_scanned DESC) as rn
    FROM allergen_list 
    WHERE id = 'F284'
)
DELETE FROM allergen_list 
WHERE ctid IN (SELECT ctid FROM cte WHERE rn > 1)
  AND id = 'F284';

内容的提问来源于stack exchange,提问作者christophmckinzie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 17:36:07