SQL查询求助:子地点地址为空时复用父关联地址
解决子地点继承父地址的查询问题
我来帮你搞定这个查询需求!先看你原SQL里的两个小问题:
- 表名不匹配:你建的表是
location2,但查询语句里写的是location - 子查询没关联当前行的父ID,逻辑上会出问题
下面给你两种靠谱的解决方案,按需选择:
方案1:修正子查询写法
把表名改对,同时给主表起别名,让子查询能正确引用当前记录的id_parent_location,还能同时返回名称和地址:
SELECT `name`, CASE WHEN `address` IS NULL THEN (SELECT `address` FROM `location2` WHERE `id` = l.`id_parent_location`) ELSE `address` END AS `address` FROM `location2` l WHERE `id` = 2;
方案2:用LEFT JOIN更高效易读
用LEFT JOIN关联父地点表,再配合COALESCE函数直接取第一个非空的地址值,这种方式比子查询性能更好,逻辑也更清晰:
SELECT l.`name`, COALESCE(l.`address`, parent.`address`) AS `address` FROM `location2` l LEFT JOIN `location2` parent ON l.`id_parent_location` = parent.`id` WHERE l.`id` = 2;
LEFT JOIN保证就算没有父地点(比如ID=1的记录),也能正常返回主表数据COALESCE会依次检查参数,返回第一个非NULL的值,刚好适配“子地址为空则用父地址”的需求
测试一下,查询id=2时会返回:
| name | address |
|---|---|
| NAME B | ADDRESS A |
查询id=1时也能正常返回自身的地址,完全符合你的预期哦!
内容的提问来源于stack exchange,提问作者user1898267
相关产品推荐
相关产品推荐

