【问题标题】:Tree structure - Fetch last level data from two tables树结构 - 从两个表中获取最后一级数据
【发布时间】:2013-01-23 11:31:23
【问题描述】:

我在以下结构中有数据。

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

请帮助我。

【问题讨论】:

    标签: mysql select tree


    【解决方案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)
    

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

    【讨论】:

    • 如何在 where 子句中给出 'A'
    • @DhinakaranPragasam 请查看我的更新答案。我没有使用 parent_id 但如果您的真实数据就像您的示例数据一样,它应该可以完成工作
    猜你喜欢
    • 1970-01-01
    • 2016-08-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多