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

如何按isPrincipal条件依据baseProduct列删除重复SQL数据

数据过滤SQL实现方案

示例数据表

pkbaseProductisPrincipal
1101
2111
3120
4130
5110
6150
7290

需求说明

  • 对于同一baseProduct,若存在isPrincipal=1的主条目,仅保留所有主条目行,删除同baseProduct下isPrincipal=0的行(如示例中pk=5的行需删除)
  • 若同一baseProduct无主条目,则保留该baseProduct的所有行

实现方法

方法1:使用EXISTS子查询(简洁易理解,推荐)

SELECT pk, baseProduct, isPrincipal
FROM your_union_result_table t1
WHERE isPrincipal = 1
   OR NOT EXISTS (
       SELECT 1 
       FROM your_union_result_table t2
       WHERE t2.baseProduct = t1.baseProduct 
         AND t2.isPrincipal = 1
   );

逻辑解释:

  • 直接保留所有isPrincipal=1的主条目行
  • 对于isPrincipal=0的行,仅当该baseProduct不存在任何主条目时才保留

方法2:使用CTE筛选主条目集合

WITH has_principal AS (
    -- 先找出所有存在主条目的baseProduct
    SELECT DISTINCT baseProduct
    FROM your_union_result_table
    WHERE isPrincipal = 1
)
SELECT pk, baseProduct, isPrincipal
FROM your_union_result_table
-- 主条目集合内的baseProduct仅保留主条目,其余保留所有行
WHERE (baseProduct IN (SELECT baseProduct FROM has_principal) AND isPrincipal = 1)
   OR baseProduct NOT IN (SELECT baseProduct FROM has_principal);

逻辑解释:

  1. 先通过CTE生成包含所有有主条目baseProduct的集合
  2. 按集合划分筛选规则:属于集合的baseProduct只留主条目,不属于集合的baseProduct留所有行

执行结果

两种方法执行后都会得到符合需求的结果:

pkbaseProductisPrincipal
1101
2111
3120
4130
6150
7290

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:35:16