アプリ版:「スタンプのみでお礼する」機能のリリースについて

再帰的にデータを取得する方法について質問させて下さい。
以下のような「TABLE1」と「TABLE2」があった場合に、

TABLE1
------------------------
| ID | AID | JOB |
------------------------
|  1|   10| XXXXX|
------------------------

TABLE2
-------------------------
| ID | PID | NAME |
-------------------------
|  10|  100|   aaa|
|  100| 1000|   bbb|
| 1000| 10000|   ccc|
--------------------------

再帰的に取得したい親階層が2つまで等分かっている場合に、以下のような結果を1度のSQLで取る事は可能でしょうか?

----------------------------------------------------------------------
|ID|AID|JOB |AID_NAME|AID_PID_1|AID_PID_NAME_1|AID_PID_2|AID_NAME_2|
----------------------------------------------------------------------
|1| 10|HIRA |     aaa|    100|        bbb|   1000|      ccc|
----------------------------------------------------------------------

また、上記の結果が取得可能な場合にパフォーマンス的には1度で取得した方が良いのでしょうか?
それともTABLE2の親階層を再帰的に取得するSQLは分割した方が良いのでしょうか?

どうかご教授のほどお願い致します。

A 回答 (1件)

取得できるかといえば、以下のようなクエリで可能です。



SELECT
a.ID ID,
a.AID AID,
a.JOB JOB,
b1.PID AID_PID_1,
b2.NAME AID_NAME_1,
b2.PID AID_PID_2,
b3.NAME AID_NAME_2
FROM TABLE1 a
INNER JOIN TABLE2 b1 ON b1.ID=a.AID
INNER JOIN TABLE2 b2 ON b2.ID=b1.PID
INNER JOIN TABLE2 b3 ON b3.ID=b2.PID

複数回クエリを実行するオーバーヘッドの方が高いと思います。
一発で取ってかまわないでしょう。
気になるならTABLE2のPIDにもインデックスを張ってください。
    • good
    • 0
この回答へのお礼

jamshid6さん

無事に取得する事が出来ました。
パフォーマンス的にも1度で取得した方が良いのですね。
いろいろと勉強になりました。
ご回答ありがとうございましたっ!

お礼日時:2009/05/22 10:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!