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

SQL查询求助:基于条件跨表对比列值,筛选关联表对应值全为false的table1 code值

解决思路与正确SQL写法

嘿,我明白你的问题啦!你原来的SQL之所以会同时返回code1和code2,是因为它只筛选出了存在关联false值的code,但没有排除那些同时存在true值的code。你真正要的是:某个code在table1里的所有column2值,对应到table2的column2全都是false的情况。

下面给你几种可行的解决方案:

方案1:使用NOT EXISTS(最直观的逻辑)

这种写法直接排除掉那些存在关联true值的code,剩下的就是符合要求的:

SELECT DISTINCT t.column1
FROM table1 t
WHERE NOT EXISTS (
    SELECT 1
    FROM table2 t2
    WHERE t.column2 = t2.column1
      AND t2.column2 = true
);

逻辑说明:如果某个code在table1中有任意一条记录对应的table2值是true,就会被排除;只有完全没有这类记录的code才会被保留。

方案2:使用GROUP BY + HAVING(统计验证)

通过分组统计每个code对应的true值数量,要求数量为0:

SELECT t.column1
FROM table1 t
JOIN table2 t2 ON t.column2 = t2.column1
GROUP BY t.column1
HAVING SUM(CASE WHEN t2.column2 = true THEN 1 ELSE 0 END) = 0;

逻辑说明:先关联两张表,按code分组后,统计每组中t2.column2 = true的记录数。如果这个数是0,说明该code的所有关联值都是false,符合需求。

方案3:使用LEFT JOIN(排除法)

通过左连接匹配true值,然后筛选出匹配不到的code:

SELECT DISTINCT t.column1
FROM table1 t
LEFT JOIN table2 t2 ON t.column2 = t2.column1 AND t2.column2 = true
WHERE t2.column1 IS NULL;

逻辑说明:把table1和table2中column2 = true的记录做左连接,如果连接后t2.column1为NULL,说明该code没有对应的true值记录,也就是所有关联值都是false。

以上三种写法都能正确返回code1,排除掉code2,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:28:10