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

SQL查询需求:筛选符合条件的Slot表数据(含LEFT JOIN)

筛选符合条件的Slot记录

原查询的问题

你的查询存在逻辑漏洞:当某个slot在SlotAlteration中同时有action=0和action=1的记录时,LEFT JOIN会返回两条结果,其中action=0的那条会被WHERE条件保留,导致这个本应被排除的slot错误出现在结果里。

正确解决方案

方案1:用NOT EXISTS子查询(推荐)

直接检查当前slot是否不存在action=1的关联记录,逻辑清晰且性能较好:

SELECT s.*
FROM Slot s
WHERE s.time_off_id IS NULL
  AND NOT EXISTS (
    SELECT 1
    FROM SlotAlteration sa
    WHERE sa.slot_id = s.id
      AND sa.action = 1
  );

方案2:LEFT JOIN筛选无action=1的记录

通过LEFT JOIN仅关联action=1的记录,再判断关联结果为空,确保没有匹配的action=1条目:

SELECT s.*
FROM Slot s
LEFT JOIN SlotAlteration sa
  ON s.id = sa.slot_id AND sa.action = 1
WHERE s.time_off_id IS NULL
  AND sa.id IS NULL;

方案3:GROUP BY + HAVING(适合需统计场景)

如果需要同时查看slot的action统计情况,可分组后确保最大action值不是1:

SELECT s.*
FROM Slot s
LEFT JOIN SlotAlteration sa ON s.id = sa.slot_id
WHERE s.time_off_id IS NULL
GROUP BY s.id, s.time_off_id -- 需包含Slot表所有非聚合字段
HAVING MAX(sa.action) IS NULL OR MAX(sa.action) != 1;

以上三种方法都能准确筛选出time_off_id为null,且对应slot_id在SlotAlteration中不存在action=1记录的Slot数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:42:49