0

以下の構造のデータがあります。

A
    A1 A2

    B  B1

    C  C1 C2 C3

group1これらの情報は、とという名前の2つのテーブルに転送されますgroup2

group1第1レベルのデータと中間レベルのデータがあります。

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デモです

親切に私を助けてください。

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%'    

これは、テーブルgroup1に存在しないテーブルgroup2からのすべての要素を返します。または(データベースの構造に応じて)これも:

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 に答える