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

如何查询包含另一表全部列值的数据行?附表结构实例

解决方案:找出包含Tb1所有col值的Tb2.name

这是个典型的「集合包含」类SQL问题,我来给你两种常用的解决方案,都能得到预期结果a:

方法一:GROUP BY + HAVING 统计匹配数

这种方法思路直观,通过统计每个name关联的唯一Tb1_col数量,和Tb1的总记录数对比,相等的就是目标name:

SELECT name
FROM Tb2
GROUP BY name
HAVING COUNT(DISTINCT Tb1_col) = (SELECT COUNT(*) FROM Tb1);

代码解释:

  • GROUP BY name:将Tb2的数据按name分组,聚合每个name的关联数据
  • COUNT(DISTINCT Tb1_col):统计每个name对应的不重复Tb1_col数量(避免同一name重复关联同一col的干扰)
  • (SELECT COUNT(*) FROM Tb1):获取Tb1中总共有多少个col值(因为你的Tb1里col都是唯一的,直接用COUNT(*)即可)
  • HAVING子句:筛选出统计数量等于Tb1总col数的name,也就是包含所有Tb1 col值的目标name

方法二:双重NOT EXISTS 反向验证

这种方法从「不存在未匹配的col」角度出发,逻辑上更贴近“包含所有值”的语义:

SELECT DISTINCT t2.name
FROM Tb2 t2
WHERE NOT EXISTS (
    -- 检查是否存在Tb1的col,当前name没有关联
    SELECT 1 FROM Tb1 t1
    WHERE NOT EXISTS (
        -- 验证当前name是否关联了这个Tb1的col
        SELECT 1 FROM Tb2 t2_sub
        WHERE t2_sub.name = t2.name AND t2_sub.Tb1_col = t1.col
    )
);

代码解释:

  • 外层查询遍历Tb2的每个name
  • 内层第一个NOT EXISTS:检查该name是否不存在未关联的Tb1 col
  • 内层第二个NOT EXISTS:判断某个Tb1的col是否没有被当前name关联,如果存在这样的col,说明该name不符合要求;反之则符合

内容的提问来源于stack exchange,提问作者S.M_Emamian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:57