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]