求助:调试SQL查询以获取同时包含AN和DE的id
问题分析与解决方案
你的SQL语句不生效的核心原因:EXISTS条件要求当前行的type_id同时对应AN和DE,但每个type_id在表D中只能关联一个type_name,因此永远找不到符合条件的行。
以下是两种可行的解决方案,均支持扩展更多type_name条件:
方案一:分组统计法(推荐,简洁易扩展)
通过关联两张表筛选目标type_name,按id分组后统计不同type_name的数量,确保数量与需要匹配的条件数一致:
SELECT C.id FROM C JOIN D ON C.type_id = D.type_id WHERE D.type_name IN ('AN', 'DE') -- 可在此添加更多需要匹配的type_name GROUP BY C.id HAVING COUNT(DISTINCT D.type_name) = 2; -- 数字需与IN中的元素数量保持一致
方案二:多EXISTS验证法(逻辑直观)
每个EXISTS子查询单独验证该id是否存在对应的type_name关联:
SELECT DISTINCT C.id FROM C WHERE EXISTS ( SELECT 1 FROM C C1 JOIN D D1 ON C1.type_id = D1.type_id WHERE C1.id = C.id AND D1.type_name = 'AN' ) AND EXISTS ( SELECT 1 FROM C C2 JOIN D D2 ON C2.type_id = D2.type_id WHERE C2.id = C.id AND D2.type_name = 'DE' );
内容的提问来源于stack exchange,提问作者M.B
相关产品推荐
相关产品推荐

