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

如何仅查询table2中外键对应[set]列值全相同的行?

问题分析与解法

现有两张表:

  • table1:仅包含id列
  • table2:包含id、op、set列

需求:筛选出在table2中所有对应行的set列值完全相同的id(例如id=a1的所有table2行set值一致,符合要求;id=a2的table2行set值有cut和slice两种,不符合要求)。

原查询语句无法得到正确结果:

SELECT DISTINCT(A.ID)
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.ID = B.ID
GROUP BY A.ID, B.SET
HAVING COUNT(DISTINCT(B.SET)) =1

原查询错误原因

原语句同时按A.ID和B.SET分组,这会把每个id下的不同set值拆分成独立分组,每个分组里的distinct set数量必然是1,导致所有关联的id都会被返回,完全不符合需求。

正确解法

解法一:分组统计distinct set数量

只按id分组,统计该id对应的set值的去重数量,仅保留数量为1的id:

SELECT A.id
FROM table1 A
JOIN table2 B ON A.id = B.id
GROUP BY A.id
HAVING COUNT(DISTINCT B.set) = 1;

解法二:排除存在多种set值的id

通过子查询找出那些存在至少两种不同set值的id,然后排除这些id:

SELECT DISTINCT A.id
FROM table1 A
JOIN table2 B ON A.id = B.id
WHERE A.id NOT IN (
    SELECT id
    FROM table2
    GROUP BY id
    HAVING COUNT(DISTINCT set) > 1
);

如果table1中的id在table2中没有对应行,若不需要保留这类id,上述两种解法都适用;若需要保留(即这类id默认符合“所有行set值相同”的逻辑),可以将JOIN改为LEFT JOIN,并调整条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:15:40