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

如何修改SQL查询:仅返回所有子记录符合条件的主记录

如何修改SQL查询以返回所有子记录均符合条件的主记录

原查询用于获取存在至少一条符合条件子记录的主记录,但我们需要调整为返回**所有子记录都满足PosIsException IS NULL**的主记录——也就是排除那些存在PosIsException IS NOT NULL子记录的主记录,同时排除没有符合条件子记录的主记录(比如示例中的Id=3)。

方法一:使用NOT EXISTS排除不符合条件的主记录

这是性能表现较好的方案,尤其适合子表有索引的场景:

SELECT i.*
FROM Incidents i
-- 确保主记录至少有一条子记录
WHERE EXISTS (
    SELECT 1 
    FROM IncidentDetails d 
    WHERE d.IncidentId = i.Id
)
-- 确保主记录下没有任何子记录的PosIsException不为空
AND NOT EXISTS (
    SELECT 1 
    FROM IncidentDetails d 
    WHERE d.IncidentId = i.Id 
    AND d.PosIsException IS NOT NULL
);

方法二:使用GROUP BY + HAVING过滤

通过分组统计不符合条件的子记录数量,确保数量为0:

SELECT i.*
FROM Incidents i
JOIN IncidentDetails d ON d.IncidentId = i.Id
GROUP BY i.Id -- 注意:不同数据库对GROUP BY的规则不同,若需返回i的所有列,需确保所有列都在GROUP BY中或使用聚合函数
HAVING COUNT(CASE WHEN d.PosIsException IS NOT NULL THEN 1 END) = 0;

这两种方案都能准确返回示例中Id=2的主记录,同时排除Id=1和Id=3的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:41:38