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

SQL创建临时表时如何实现关联记录有一个为真则全部布尔值设为真

解决方案

提供两种可直接使用的实现方式,均兼容主流SQL数据库:

方式1:EXISTS子查询实现(符合你提到的实现思路)

外层先筛选所有主项目记录,子查询判断对应主项目关联的所有记录(含自身)是否存在激活标记为Y的条目:

SELECT 
    p.Name AS Project,
    CASE 
        WHEN EXISTS (
            SELECT 1 
            FROM Projects p2 
            WHERE (p2.Id = p.Id OR p2.`Master Project` = p.Id)
              AND p2.Active = 'Y'
        ) THEN 'Y'
        ELSE 'N'
    END AS Active
FROM Projects p
WHERE p.`Master Project` IS NULL;

方式2:分组聚合实现(写法更简洁)

利用Y的字符串排序优先级高于N、NULL会被聚合函数忽略的特性,按主项目维度分组后直接取最大值判断:

SELECT 
    MAX(CASE WHEN p.`Master Project` IS NULL THEN p.Name END) AS Project,
    CASE WHEN MAX(p.Active) = 'Y' THEN 'Y' ELSE 'N' END AS Active
FROM Projects p
GROUP BY IFNULL(p.`Master Project`, p.Id);

注意:如果你的数据库不支持IFNULL函数,可以替换为对应方言的空值处理函数,比如SQL Server用ISNULL、PostgreSQL/Oracle用COALESCE;带空格的字段名转义符也可以根据数据库类型调整,SQL Server用方括号[]、PostgreSQL用双引号""。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:57:03