SQL中无共同列名的两表如何JOIN得到子女父母关系并按子女名排序
问题原因
你当前查询结果不符合预期的核心原因有两点:
- 仅关联了一次
people表,所有字段取的都是匹配到的子女信息,没有单独关联查询父母对应的人员数据 - 代码存在笔误,关联条件中的表名
relaions拼写错误,正确应为relations
正确SQL实现
SELECT p_child.name AS child, MAX(CASE WHEN p_parent.gender = 'M' THEN p_parent.name END) AS father, MAX(CASE WHEN p_parent.gender = 'F' THEN p_parent.name END) AS mother FROM relations r INNER JOIN people p_child ON r.c_id = p_child.id INNER JOIN people p_parent ON r.p_id = p_parent.id GROUP BY p_child.id, p_child.name ORDER BY p_child.name;
逻辑说明
- 第一次关联
people表(别名p_child),通过子女IDc_id匹配,拿到子女的姓名 - 第二次关联
people表(别名p_parent),通过父母IDp_id匹配,拿到对应父母的性别、姓名信息 - 用
CASE WHEN按性别区分父母,配合MAX聚合函数合并同一个子女的两条父母关联记录,提取出父亲、母亲对应的姓名 - 最后按子女姓名排序,符合输出要求
如果需要保留仅登记了单亲信息的子女记录,可以将第二次INNER JOIN改为LEFT JOIN。
内容的提问来源于stack exchange,提问作者user weASD
相关产品推荐
相关产品推荐

