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

MySQL新手求助:如何剔除PROPERTYVALUE='NG'对应的所有PARENTID

解决MySQL中剔除含PROPERTYVALUE='NG'的PARENTID的问题

嘿,作为MySQL新手,这种筛选需求其实挺典型的,我来一步步帮你搞定!

首先明确你的核心需求:要排除所有关联过PROPERTYVALUE='NG'的PARENTID对应的所有记录——也就是说,只要某个PARENTID下有任意一条记录的PROPERTYVALUE是'NG',这个PARENTID的所有数据都要被排除在最终结果之外。

先对应你的数据示例

输入数据参考:

PARENTIDPROPERTYVALUE其他字段...
101OK...
101NG...
102OK...
103NG...
104OK...
104OK...

期望输出参考:

PARENTIDPROPERTYVALUE其他字段...
102OK...
104OK...
104OK...

两种实用解决方案

方案1:子查询写法(直观易懂,适合新手)

这是最容易理解的写法,先找出所有带'NG'的PARENTID,再排除它们:

SELECT *
FROM your_table
WHERE PARENTID NOT IN (
    -- 先筛选出所有PROPERTYVALUE为'NG'的PARENTID,去重避免重复计算
    SELECT DISTINCT PARENTID
    FROM your_table
    WHERE PROPERTYVALUE = 'NG'
);

方案2:LEFT JOIN写法(性能更优,适合大数据表)

如果你的表数据量较大,LEFT JOIN的执行效率通常比NOT IN更高:

SELECT t.*
FROM your_table t
LEFT JOIN (
    SELECT DISTINCT PARENTID
    FROM your_table
    WHERE PROPERTYVALUE = 'NG'
) ng_ids ON t.PARENTID = ng_ids.PARENTID
-- 只保留关联不上NG列表的记录,也就是没有NG的PARENTID
WHERE ng_ids.PARENTID IS NULL;

额外小提示

  • 记得把your_table替换成你实际使用的表名
  • 如果是要删除这些记录而非查询,建议先用SELECT验证结果,再改成DELETE操作(用JOIN写法更安全):
DELETE t.*
FROM your_table t
JOIN (
    SELECT DISTINCT PARENTID
    FROM your_table
    WHERE PROPERTYVALUE = 'NG'
) ng_ids ON t.PARENTID = ng_ids.PARENTID;

删除前一定要备份数据,避免误操作!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:26