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

MySQL中如何用JOIN改写DELETE语句?解决#1093报错问题

用JOIN改写重复卡片删除语句解决MySQL 1093错误

你遇到的是MySQL的典型限制:不能在DELETE/UPDATE语句的WHERE子句中直接将目标表作为子查询的FROM表引用。下面是用JOIN实现相同逻辑的写法,核心是先通过子查询生成要保留的记录集合,再关联原表定位需要删除的数据。

简洁高效的写法

DELETE cc
FROM customers_cards cc
LEFT JOIN (
    -- 先筛选出ezpay下每个卡号对应的最小ID(要保留的记录)
    SELECT number_card, MIN(id) AS min_id
    FROM customers_cards
    WHERE belongs_to = "ezpay"
    GROUP BY number_card
) AS keep_rows ON cc.id = keep_rows.min_id
-- 只删除ezpay分组中,不在保留列表里的记录
WHERE cc.belongs_to = "ezpay"
  AND keep_rows.min_id IS NULL;

逻辑说明

  1. 子查询keep_rows先过滤出ezpay分组下,每个number_card对应的最小ID,这些是需要保留的唯一记录
  2. 原表cc与这个保留集合做左连接,找不到匹配(keep_rows.min_id IS NULL)的记录就是需要删除的重复项
  3. 通过临时子查询结果集关联,避开了MySQL对直接引用目标表的限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:27:05