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

求SQL查询语句:获取关联表中对应ID值不同的产品列表

筛选关联表中同一ID对应多值的产品SQL解法

要找出表A中,对应表B里同一prod_id存在不同值的产品,核心思路是先定位表B中符合条件的prod_id,再关联表A获取产品信息,以下是两种可靠的写法:

方法一:GROUP BY + HAVING 筛选关联

先通过子查询从表B中筛选出存在不同值的prod_id,再和表A关联:

SELECT DISTINCT a.*
FROM 表A a
JOIN (
    -- 筛选出对应value有多个不同值的prod_id
    SELECT prod_id
    FROM 表B
    GROUP BY prod_id
    HAVING COUNT(DISTINCT value) > 1
) b_filtered ON a.prod_id = b_filtered.prod_id;
  • 子查询里COUNT(DISTINCT value) > 1确保该prod_id下至少有两个不同的value
  • 外层用DISTINCT避免表A中同一产品因关联多条表B记录而重复输出

方法二:窗口函数标记筛选

用窗口函数计算每个prod_id下不同value的数量,再筛选符合条件的记录:

SELECT DISTINCT a.*
FROM 表A a
JOIN (
    SELECT 
        prod_id,
        -- 按prod_id分区,统计每个分区内不同value的数量
        COUNT(DISTINCT value) OVER(PARTITION BY prod_id) AS value_distinct_count
    FROM 表B
) b_filtered ON a.prod_id = b_filtered.prod_id
WHERE b_filtered.value_distinct_count > 1;

这种写法适合需要保留表B更多字段进行后续处理的场景,逻辑更直观。

补充说明

如果表B中prod_id和value的组合没有重复存储(即同一prod_id下不会重复出现相同value),可以把COUNT(DISTINCT value)简化为COUNT(*) > 1,但保留DISTINCT能避免数据脏读导致的误判,通用性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:50:53