2013-01-23 45 views
0

我有以下结构中的数据。树结构 - 从两个表中获取最后一级数据

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

您可以使用此:

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

返回从不存在于表1组第2组表的所有元素。 或(取决于你的数据库是如何组织)也这样:

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) 

我在这里分组的字符串的第一个字符,并得到数值的最大值。

+0

我该如何在**子句中给**'A'**? – Dhinakar

+0

@DhinakaranPragasam请参阅我的更新答案。我没有使用parent_id,但如果您的实际数据与您的示例数据相似,则应该完成这项工作 – fthiella