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

如何删除Products表中不存在的Categories表记录?

删除未在产品中引用的分类记录

针对你的需求,需要删除Categories表中那些未在Products表的Category字段(逗号分隔多值)中出现过的分类记录。下面分不同数据库给出对应的SQL语句:

MySQL

利用FIND_IN_SET函数直接匹配逗号分隔的分类集合:

DELETE c FROM Categories c
WHERE NOT EXISTS (
    SELECT 1 FROM Products p
    WHERE FIND_IN_SET(c.Name, p.Category) > 0
);

SQL Server

通过CHARINDEX加前后逗号实现精确匹配(避免部分匹配,比如把C11误判为C1):

DELETE FROM Categories c
WHERE NOT EXISTS (
    SELECT 1 FROM Products p
    WHERE CHARINDEX(',' + c.Name + ',', ',' + p.Category + ',') > 0
);

Oracle

用INSTR函数实现类似SQL Server的精确匹配逻辑:

DELETE FROM Categories c
WHERE NOT EXISTS (
    SELECT 1 FROM Products p
    WHERE INSTR(',' || p.Category || ',', ',' || c.Name || ',') > 0
);

补充说明

如果数据库支持表值函数(比如SQL Server的STRING_SPLIT),也可以先拆分Products的Category字段为独立行,再用NOT IN或NOT EXISTS匹配:
以SQL Server为例:

DELETE FROM Categories
WHERE Name NOT IN (
    SELECT DISTINCT value
    FROM Products
    CROSS APPLY STRING_SPLIT(Category, ',')
);

这种方式逻辑更清晰,也避免了字符串匹配的潜在问题,推荐在支持的数据库中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:41:00