树结构 - 从两个表中获取最后一级数据

时间:2013-01-23 11:31:23

标签: mysql select tree

我的数据如下。

A
    A1 A2

    B  B1

    C  C1 C2 C3

这些信息转移到两个名为group1group2的表中。

group1拥有第一级数据和中级数据。

group2拥有最后一级数据和中级数据。

group1

 group_name    group_id
  A             1
  A1            2
  B             3
  C             4
  C1            5
  C2            6

group2

 group2_name   parent_id
   A1             1
   A2             2
   B              1  
   B1             3
   C              1
   C1             4
   C2             5
   C3             6

现在我想获得A组下的最后一级信息。

我的输出可能是

group2_name
A2
B1
C3

我可以使用以下查询来获取信息级别2。

select group2.group_name from group2 
inner join
group1 on group1.group_id = group2.parent_id
where group1.group_name = 'A'

如何获得上述输出?

这是SQLFIDDLE Demo

请帮帮我。

1 个答案:

答案 0 :(得分:1)

你可以用这个:

select
  group2.group_name
from
  group2 left join group1
  using(group_name)
where
  group1.group_name is null
  and group2.group_name like 'A%'    

返回表group2中不存在于表group1中的所有元素。 或者(取决于数据库的结构)也是这样的:

select
  concat(left(group_name,1),
    case when max(mid(group_name,2,length(group_name)-1)+0)>0 then
              max(mid(group_name,2,length(group_name)-1)+0)
         else '' end)
from group2
where group2.group_name like 'A%'
group by left(group_name,1)

这里我正在为字符串的第一个字符分组,并获取数值的最大值。