2013-01-23 44 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