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

编写SQL查询:获取同时拥有主副地址的ParentTable记录姓名

需求:查询同时拥有主、副地址的父表记录名称

编写SQL查询语句,从parentTable中获取那些在childTable里同时存在primary(主地址)和secondary(副地址)类型关联数据的记录的name字段。

parentTable结构与数据

=======================================
parentid(PK), name, timestamp
1, Dr John, 2022-01-12 00:00:00
2, Dr Smita, 2022-02-13 00:00:00
3, Dr Roy, 2022-08-13 00:00:00
4, Dr Shawn, 2022-08-14 00:00:00

childTable结构与数据

=======================================
childId(PK), parentId(FK to parentTable.parentid), addressType, location, timestamp
1, 1, primary, Pune, 2022-01-12 00:00:00
2, 1, secondary, Mumbai, 2022-01-12 00:00:00
3, 2, primary, Delhi, 2022-01-13 00:00:00
4, 3, primary, Dubai, 2022-08-13 00:00:00
5, 3, secondary, London, 2022-08-13 00:00:00
6, 4, primary, Banglore, 2022-08-14 00:00:00

预期查询结果

Name
Dr John
Dr Roy

解决方案

提供两种常用的SQL实现方式:

方法一:分组统计法

关联子表后分组,统计每个父ID对应的不同地址类型数量,筛选出数量为2的记录:

SELECT p.name
FROM parentTable p
JOIN childTable c ON p.parentid = c.parentId
WHERE c.addressType IN ('primary', 'secondary')
GROUP BY p.parentid, p.name
HAVING COUNT(DISTINCT c.addressType) = 2;

方法二:双内连接法

分别关联子表中主地址和副地址的记录,只有同时存在两种地址的父记录才会被保留:

SELECT p.name
FROM parentTable p
JOIN childTable c1 ON p.parentid = c1.parentId AND c1.addressType = 'primary'
JOIN childTable c2 ON p.parentid = c2.parentId AND c2.addressType = 'secondary';

两种方法都能得到预期结果,可根据数据表规模和索引情况选择更高效的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:55:28