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

如何获取Table B中关联状态全为true的Table A记录

筛选Table A中关联Table B所有status均为true的记录

需求说明

需要查询Table A中满足以下条件的记录:该A记录关联的所有Table B记录的status字段值均为true,同时返回对应的Table B记录。

示例数据

Table A

idname
9'name1'
7'name2'
6'name3'

Table B

ididAstatus
209true
219false
227true
237true
247true
306false
316true
326false

预期输出

A.idA.nameB.idB.idAB.status
7'name2'227true
7'name2'237true
7'name2'247true

解决方案

方法1:使用NOT EXISTS排除存在false的A记录

这是最直观的写法,先找出所有不存在关联B记录status为false的A记录,再关联B表获取对应数据:

SELECT a.*, b.*
FROM TableA a
JOIN TableB b ON a.id = b.idA
WHERE NOT EXISTS (
    SELECT 1
    FROM TableB b2
    WHERE b2.idA = a.id
      AND b2.status = false
);

方法2:使用GROUP BY + HAVING筛选符合条件的A id

先通过分组统计每个A id对应的B记录中status为false的数量,筛选出数量为0的A id,再关联两张表:

SELECT a.*, b.*
FROM TableA a
JOIN TableB b ON a.id = b.idA
JOIN (
    SELECT idA
    FROM TableB
    GROUP BY idA
    HAVING COUNT(CASE WHEN status = false THEN 1 END) = 0
) valid_a ON a.id = valid_a.idA;

方法3:使用LEFT JOIN + IS NULL排除无效A记录

通过左连接关联存在false的B记录,筛选出没有匹配到的A记录,再关联B表:

SELECT a.*, b.*
FROM TableA a
JOIN TableB b ON a.id = b.idA
LEFT JOIN TableB b2 ON a.id = b2.idA AND b2.status = false
WHERE b2.id IS NULL;

说明

  • NOT EXISTS通常在有合适索引(比如TableB的idA和status联合索引)时性能最优
  • GROUP BY方法适合需要额外统计信息的场景
  • LEFT JOIN写法更易于理解,适合新手

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:25:18