You need to enable JavaScript to run this app. 编写SQL查询:获取关联B、C表无approved_status=2的Table A记录
优惠活动
大模型
产品
解决方案
定价
更多

编写SQL查询:获取关联B、C表无approved_status=2的Table A记录

核心筛选逻辑拆解

两个约束需要同时满足,无优先级区别:

  • 对A表的任意记录,所有关联的B表记录中,不存在approved_status = 2的条目(因为A和B是一对多关系,只要有任意一条B关联记录状态为2,无论其他B记录状态是什么,该A记录都不符合要求)
  • 对A表的任意记录,关联的C表记录中(A和C为一对一关系),不存在approved_status = 2的条目

注意:直接用INNER JOIN关联B表做筛选容易出现行重复、逻辑偏差,优先使用反存在判断的写法规避这类问题,同时这类写法在关联表数据量较大时查询性能更优。

标准查询SQL
SELECT a.id, a.Text_message_to_show
FROM TableA a
-- 校验B表关联规则
WHERE NOT EXISTS (
  SELECT 1
  FROM TableB b
  WHERE b.request_id = a.id
    AND b.approved_status = 2
)
-- 校验C表关联规则
AND NOT EXISTS (
  SELECT 1
  FROM TableC c
  WHERE c.request_id = a.id
    AND c.approved_status = 2
);
样例数据校验结果

结合给出的测试数据逐一匹配规则:

  • A表id=1的记录:B表存在id=101的关联记录approved_status=2,C表存在id=501的关联记录approved_status=2,不满足规则,被过滤
  • A表id=2的记录:B表的两条关联记录(id=103、104)均为approved_status=2,不满足B表的规则,被过滤

最终查询返回空结果集,和规则匹配结果完全一致。

业务场景适配说明:
上述写法默认支持「A表记录无关联B/C表记录」的场景——这种场景下因为不存在状态为2的关联条目,会被判定为符合要求。如果业务要求A表必须在B、C表存在有效关联才能被纳入结果,只需要在WHERE子句中补充对应存在判断即可:

-- 强制要求A记录必须有B、C关联
AND EXISTS (SELECT 1 FROM TableB b WHERE b.request_id = a.id)
AND EXISTS (SELECT 1 FROM TableC c WHERE c.request_id = a.id)

内容的提问来源于stack exchange,提问作者hari vallabh shukla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 15:06:09