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

按Client分组删除名称字段为其他记录名称后缀的记录

解决同一Client下删除被其他记录包含(作为后缀)的记录

我来帮你搞定这个批量删除的需求!你已经找到了被包含的记录,现在只需要把这个逻辑整合到DELETE语句里,限定同一Client的条件就行。

核心思路

我们需要定位到同一Client下,自身Name是另一条同Client记录Name后缀的那些记录,然后批量删除它们。关键是用自关联(同表连接)来匹配这些满足条件的记录。

方法1:使用EXISTS子查询(推荐,逻辑清晰)

先可以用SELECT语句验证要删除的记录是否正确:

SELECT m1.*
FROM Main m1
WHERE EXISTS (
    SELECT 1
    FROM Main m2
    WHERE m1.Client = m2.Client  -- 限定同一Client
      AND m1.Name != m2.Name     -- 排除记录自身匹配
      AND m2.Name LIKE CONCAT('%', m1.Name)  -- m1的Name是m2的后缀
)

确认结果符合预期后,把SELECT换成DELETE就能执行删除:

DELETE m1
FROM Main m1
WHERE EXISTS (
    SELECT 1
    FROM Main m2
    WHERE m1.Client = m2.Client
      AND m1.Name != m2.Name
      AND m2.Name LIKE CONCAT('%', m1.Name)
)

方法2:使用JOIN关联表

如果你习惯用JOIN的写法,也可以这样实现:
先验证:

SELECT DISTINCT m1.*
FROM Main m1
JOIN Main m2 ON m1.Client = m2.Client
             AND m1.Name != m2.Name
             AND m2.Name LIKE CONCAT('%', m1.Name)

删除语句:

DELETE m1
FROM Main m1
JOIN Main m2 ON m1.Client = m2.Client
             AND m1.Name != m2.Name
             AND m2.Name LIKE CONCAT('%', m1.Name)

注意事项

  • 一定要先运行SELECT版本确认要删除的记录,避免误删数据!
  • 如果你的数据库对CONCAT函数的语法有差异(比如某些版本用||拼接),可以调整成对应数据库的字符串拼接方式。
  • 如果有重复的Name+Client组合,DISTINCT能帮你避免重复匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:56:15