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

SQL无需存储过程实现:主表关联明细表返回全True/False结果

无需存储过程实现主表关联明细表的全访问判断

可以完全通过单条SQL查询实现需求,不需要存储过程,以下提供两种高效的实现方式:

方法一:LEFT JOIN + 聚合函数

利用聚合函数判断是否存在Visited=False的记录,逻辑清晰直观:

SELECT 
    t1.ID,
    t1.Name,
    -- 若该ID无明细记录或所有Visited均为True则返回True,否则返回False
    CASE 
        WHEN NOT EXISTS (SELECT 1 FROM Table2 t2 WHERE t2.ID = t1.ID) THEN True
        WHEN SUM(CASE WHEN t2.Visited = False THEN 1 ELSE 0 END) = 0 THEN True
        ELSE False
    END AS AllVisited
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.ID = t2.ID
GROUP BY t1.ID, t1.Name;

逻辑说明:

  1. 通过LEFT JOIN保留主表Table1的所有记录
  2. 用SUM(CASE...)统计Visited=False的记录数,若为0则说明所有记录均为True
  3. 额外处理了主表ID在明细表中无对应记录的场景(可根据实际需求调整返回值)

方法二:EXISTS子查询(性能更优)

利用NOT EXISTS直接判断是否存在Visited=False的记录,找到匹配项后立即终止子查询,性能更高效:

SELECT 
    t1.ID,
    t1.Name,
    -- 不存在Visited=False的记录则返回True,否则返回False
    NOT EXISTS (
        SELECT 1 
        FROM Table2 t2 
        WHERE t2.ID = t1.ID AND t2.Visited = False
    ) AS AllVisited
FROM Table1 t1;

逻辑说明:

  • 对主表每条记录,检查明细表中是否存在同ID且Visited=False的记录
  • 若不存在则返回True(包括明细表无对应ID的情况),存在则返回False

两种方法都能得到你期望的输出结果:

1,A,True 
2,B,False
3,C,False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:42:55