如何通过ParentID关联拼接同表父子行的Title字段内容
可以实现,通过表的自关联查询即可完成需求,适配绝大多数关系型数据库的通用写法如下:
SELECT p.Id, CONCAT(p.Title, c.Title) AS Title FROM -- 请替换下方your_table为你的实际表名 your_table p LEFT JOIN your_table c ON p.Id = c.ParentID WHERE p.ParentID IS NULL;
逻辑说明:
- 别名
p对应父行(ParentID为NULL的顶级行),别名c对应关联的子行 CONCAT为SQL标准拼接函数,若使用Oracle数据库可替换为p.Title || c.Title AS Title- 如果需要兼容父行没有对应子行、避免返回NULL的场景,可以调整为如下写法:
SELECT p.Id, CONCAT(p.Title, COALESCE(c.Title, '')) AS Title FROM your_table p LEFT JOIN your_table c ON p.Id = c.ParentID WHERE p.ParentID IS NULL;
如果存在1个父行对应多个子行的场景,需要拼接所有子行的Title,MySQL可以使用如下写法:
SELECT p.Id, CONCAT(p.Title, GROUP_CONCAT(c.Title SEPARATOR '')) AS Title FROM your_table p LEFT JOIN your_table c ON p.Id = c.ParentID WHERE p.ParentID IS NULL GROUP BY p.Id, p.Title;
内容的提问来源于stack exchange,提问作者Khen
相关产品推荐
相关产品推荐

