0

我有以下结构中的数据。

A
    A1 A2

    B  B1

    C  C1 C2 C3

这些信息转移到名为group1和的两个表中group2

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

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

IE

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 演示

请帮助我。

4

1 回答 1

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)

这里我对字符串的第一个字符进行分组,并获取数值的最大值。

于 2013-01-23T11:46:26.347 回答