我有时会遇到这样一种情况,即我有父/子关系,我想为每个父级选择所有子级。
这是一个肤浅的例子。
SELECT parent.id as parent_id, child.id as child_id
FROM parent LEFT JOIN child ON parent.id = child.parent_id
ORDER BY parent.id
会产生
parent_id child_id
1 20
1 21
2 33
2 67
我想做类似的事情
SELECT parent.id, child1.id as child1_id, child2.id as child2_id
FROM parent LEFT JOIN child ON parent.id = child.parent_id
GROUP BY parent.id
和产量
parent_id child1_id child2_id
1 20 21
2 33 67
我试图避免使用GROUP_CONCAT
,因为我想为每个孩子创建单独的列。
我意识到我可以加入孩子两次并过滤选择,但考虑到我的实际数据集,它可能会变得毛茸茸的加入两次。此外,如果您可以对任意数量的孩子进行此操作,那将非常酷,例如:
parent_id child1_id child2_id child3_id
1 20 21 null
2 33 67 109
3 45 null null