3
私はplaceTableというテーブルを完全に3つの列を持っています:id、parent_id、name、country、stateおよびcityテーブルが含まれています。SQL Server:同じ列をUNIONなしで1列に3回選択します
市のparent_IDはstateのidで、stateのparent_IDはcountryのidです。
そして私はcityListと呼ばれる別のテーブルを持っていますが、idはplaceTableのIDと同じです。
私が欲しいのは、表1の州と国を含むcity2 cityListのみを選択することです。以下の表2はシドニーを示しています。したがって、シドニーのid、parent_ID、および名前を取得します。オーストラリアのNSW州とその国オーストラリアのtable1。
- 表1:placeTable
id parent_ID name
-------------------
1 0 Australia
2 0 UK
33 1 NSW
34 1 Western Australia
55 33 Sydney
70 34 Perth
- 表2:cityList
id name
-------------------
55 Sydney
私が欲しい出力:
id parent_ID name
-------------------
1 0 Australia
33 1 NSW
55 33 Sydney
私は以下やってますが、あまりにも長い間、私は利用可能な他のよりスマートな方法があるかもしれません考えていますで、私の望む結果を得ることができます:私は、以下試してみましたが、これは私にだけ与えることができ
Select distinct pt.id,pt.parent_id,pt.name
from placeTable AS pt
join cityList as cl on cl.id = pt.id
UNION ALL
Select distinct ly2.id,ly2.parent_id,ly2.name
from placeTable AS pt
join cityList as cl on cl.id = pt.id
join placeTable AS ly2 on pt.parent_id = ly2.id
UNION ALL
Select distinct ly3.id,ly3.parent_id,ly3.name
from placeTable AS pt
join cityList as cl on cl.id = pt.id
join placeTable AS ly2 on pt.parent_id = ly2.id
join placeTable as ly3 on ly2.parent_id = ly3.id
都市:
Select distinct pt.id,pt.parent_id,pt.name
from placeTable AS pt
join cityList as cl on cl.id = pt.id
join placeTable AS ly2 on pt.parent_id = ly2.id
join placeTable as ly3 on ly2.parent_id = ly3.id
私は質問を理解していない:再帰的にテーブルをルックアップして完全な子 - >親階層を出力したいのですか? – Shastick
最初のSQLステートメントのSELECTリストに 'ly2.name'と' ly3.name'を追加するだけで、あなたは金色になります。あなたはそれらのテーブルを結合しますが、それらから選択しないでください... 'select distinct bu.id、bu.parent_id、bu.name、ly2.name、ly3.name' – JNevill
あなたの質問は意味をなさない。 'bu'とは何ですか? –