[前][次][番号順一覧][スレッド一覧]

mysql:13060

From: 関 俊夫 <関 俊夫 <to-seki@xxxxxxxxxx>>
Date: Sun, 4 Jun 2006 08:15:22 +0900
Subject: [mysql 13060] Re: 同一テーブルから階層別に分けるSQL文をつくりたい

ありがとうございます。解決しました。
テーブル名は"sections"です。また階層は4段階なので次のSQLで実現しました。
UNION SELECTは初めて使ったのですが、すごいことが出来るんですね。
もう一つ教えてください。4階層目の"id"を取得するにはどうすれば良いでしょう
か?
実現したSQL文↓
SELECT a1, a2, a3, a4
FROM (
SELECT name AS a1, NULL AS a2, NULL AS a3, NULL AS a4
FROM sections
WHERE upper_section_id =0
UNION SELECT t1_0.name AS a1, t1_1.name AS a2, NULL AS a3, NULL AS a4
FROM sections AS t1_0, sections AS t1_1, sections AS t1_2, sections AS t1_3
WHERE t1_0.upper_section_id =0
AND t1_1.upper_section_id = t1_0.id
UNION SELECT t1_0.name AS a1, t1_1.name AS a2, t1_2.name AS a3, NULL AS a4
FROM sections AS t1_0, sections AS t1_1, sections AS t1_2, sections AS t1_3
WHERE t1_0.upper_section_id =0
AND t1_1.upper_section_id = t1_0.id
AND t1_2.upper_section_id = t1_1.id
UNION SELECT t1_0.name AS a1, t1_1.name AS a2, t1_2.name AS a3, t1_3.name AS
a4
FROM sections AS t1_0, sections AS t1_1, sections AS t1_2, sections AS t1_3
WHERE t1_0.upper_section_id =0
AND t1_1.upper_section_id = t1_0.id
AND t1_2.upper_section_id = t1_1.id
AND t1_3.upper_section_id = t1_2.id
) AS t0
ORDER BY a1, a2, a3, a4

> -----Original Message-----
> From: 関 俊夫 [mailto:to-seki@xxxxxxxxxx]
> Sent: Sunday, June 04, 2006 6:37 AM
> To: ml@xxxxxxxxxx
> Subject: [mysql 13059] Re: 同一テーブルから階層別に分けるSQL文をつくり> い
>
> すいません。先ほどresに気がつかなくて送ってしまいました。
> 時々パソコンの時計がくるってしまいます。
> 早速このSQLを試してみます。
>
> > -----Original Message-----
> > From: F.Y [mailto:fumi_sby@xxxxxxxxxx]
> > Sent: Saturday, June 03, 2006 9:07 PM
> > To: ml@xxxxxxxxxx
> > Subject: [mysql 13057] Re: 同一テーブルから階層別に分けるSQL文をつく> た
> > い
> >
> > とんでもない日付で送ってきてますね。
> >
> > select a1, a2, a3
> > from (
> > select name as a1, null as a2, null as a3
> > from t1
> > where upper_section_id = 0
> > union
> > select t1_0.name as a1, t1_1.name as a2, null as a3
> > from t1 as t1_0, t1 as t1_1
> > where t1_0.upper_section_id = 0
> > and t1_1.upper_section_id = t1_0.id
> > union
> > select t1_0.name as a1, t1_1.name as a2, t1_2.name as a3
> > from t1 as t1_0, t1 as t1_1, t1 as t1_2
> > where t1_0.upper_section_id = 0
> > and t1_1.upper_section_id = t1_0.id
> > and t1_2.upper_section_id = t1_1.id
> > ) as t0
> > order by a1, a2, a3
> > ;
> >
> > 美しくない…。
> > 直積を華麗に使う方法がありそうだけど、体重が1kg増えてしまったので考えら
> > れない…。
> >
> > --- 関 俊夫 <to-seki@xxxxxxxxxx> からのメッセージ:
> > > はじめての投稿です。
> > > SQL文が作れなく困っています。よろしくお願いします。
> > > 会社の組織階層を格納するテーブルがあります。
> > > テーブル構造は
> > > +------------------------------+
> > > | sections                     |
> > > +------------------------------+
> > > | id               int     (8) |
> > > | name             varchar (50)|
> > > | upper_section_id int     (8) |
> > > +------------------------------+
> > > そのデータは
> > > +----------------------------------+
> > > | id |   name   | upper_section_id |
> > > +----------------------------------+
> > > | 1  | 本社     |     0            |
> > > | 2  | A事業部 |     1            |
> > > | 3  | 東京支店 |     2            |
> > > | 4  |  営業部  |     3            |
> > > | 5  | B事業部 |     1            |
> > > | 6  | 大阪支店 |     5            |
> > > +----------------------------------+
> > > 希望する結果
> > > +---------------------------------------+
> > > | t1.name | t2.name | t3.name | t4.name |
> > > +---------------------------------------+
> > > |本社     |         |         |         |
> > > |本社     |A事業部 |         |         |
> > > |本社     |A事業部 |東京支店 |         |
> > > |本社     |A事業部 |東京支店 |営業部   |
> > > |本社     |B事業部 |         |         |
> > > |本社     |B事業部 |大阪支店 |         |
> > > +---------------------------------------+
> > > 私がためしたSQL文は
> > > SELECT t1.name, t2.name, t3.name, t4.name
> > > FROM `sections` AS t1
> > > INNER JOIN `sections` AS t2 ON t2.upper_section_id = t1.id
> > > INNER JOIN `sections` AS t3 ON t3.upper_section_id = t2.id
> > > INNER JOIN `sections` AS t4 ON t4.upper_section_id = t3.id
> > > ORDER BY t1.name, t2.name, t3.name, t4.name
> > > 私がためした結果
> > > +---------------------------------------+
> > > | t1.name | t2.name | t3.name | t4.name |
> > > +---------------------------------------+
> > > |本社     |A事業部 |東京支店 |営業部   |
> > > +---------------------------------------+
> > > 以上のように4つの階層関係が出来ているデータのみが表示してします。
> > >
------------------------
関 俊夫
ダンサーズオンライン
http://www.dancers-online.com/



[前][次][番号順一覧][スレッド一覧]

     12277 2005-10-25 09:10 ["fujita" <t-fujita@x] MySQL5.0でシンボリックが有効にならない  
     12278 2005-10-26 08:14 ┣[Tetsuro IKEDA <tetsu]                                       
     12279 2005-10-26 09:49 ┃┗["fujita" <t-fujita@x]                                     
     12280 2005-10-26 09:57 ┃ ┗[Tetsuro IKEDA <tetsu]                                   
     12281 2005-10-26 10:30 ┃  ┗["fujita" <t-fujita@x]                                 
     13055 1938-05-16 13:05 ┗[関 俊夫 <to-seki@xx] 同一テーブルから階層別に分けるSQL文をつくりたい
     13057 2006-06-03 21:06  ┣["F.Y" <fumi_sby@xxxx]                                     
     13059 2006-06-04 06:36  ┃┗[関 俊夫 <to-seki@xx]                                   
->   13060 2006-06-04 08:15  ┃ ┗[関 俊夫 <to-seki@xx]                                 
     13061 2006-06-04 10:30  ┃  ┗[関 俊夫 <to-seki@xx]                               
     13058 2006-06-04 06:31  ┣[関 俊夫 <to-seki@xx]                                     
     13180 2006-07-23 03:25  ┗[demanotto <demanotto]