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

mysql:13057

From: "F.Y" <"F.Y" <fumi_sby@xxxxxxxxxx>>
Date: Sat, 3 Jun 2006 21:06:40 +0900 (JST)
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/
> 
> 
> 

--------------------------------------
Let's start Yahoo! Auction  -  Free Campaign Now!
http://pr.mail.yahoo.co.jp/auction/

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

     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]