我有这样的层次结构数据:

Id, Related
1, 0
2, 1
3, 1
4, 1
5, 4
6, 3
7, 0
8, 7
9, 3
10, 8


我想选择2个父母,然后为每个父母找到2个孩子

结果:

id
1
  2
  3
7
  8


就像是:

select * from TABLE T1 where T1.related=0 order by T2.id limit 2
union
select * from TABLE T2 where T1.id=T2.related order by T2.id limit 2


我一直在研究mysql选择分层数据,但找不到任何能帮助我解决这种情况的方法。

最佳答案

您想使用Related = 0选择所有记录。然后,您要选择最多两个随机子代。一种解决方案是采用最小子ID和最大子ID。您可以在子查询中查找父母。

select
  related as parent_id,
  min(id) as child1_id,
  max(id) as child2_id
from mytable
where related in (select id from mytable where related = 0)
group by related;


如果您不想两次显示相同的子ID(如果只有一个孩子,即min(id) = max(id)),请将其更改为:

select
  related as parent_id,
  min(id) as child1_id,
  nullif(max(id), min(id)) as child2_id
...


这些查询在没有孩子的情况下不会显示related = 0记录,但是,在没有孩子的情况下,它们也不是父母:-)

10-06 13:57
查看更多