0

結合する 2 つのテーブルがあります: tb_assets と tb_locations です。場所は、場所の階層です。したがって、アセットは「ビルディング A」に割り当てられ、その親ロケーションは「サンフランシスコ」であり、親ロケーションは「米国」である可能性があります。

資産を照会するときに、親の名前と、その場所の親の名前も取得したいと考えています。

テーブルのレイアウトは次のとおりです。

テーブル レイアウト

したがって、次を使用して、現在のアセットの親名を簡単に取得できますが、派生テーブルと CTE で遊んだことがありますが、これを達成するための適切な方法に頭を悩ませているようには見えません。

SELECT f_assetname, f_locationname
FROM tb_assets
LEFT JOIN tb_locations on f_assetlocationID = f_locationID

ここにいくつかのサンプルデータがあります

tb_assets

f_assetID        f_assetname        f_assetlocationID
------------------------------------------------------
1                Building A         1
2                Building B         2

tb_locations

f_locationID     f_locationname     f_locationparentID
------------------------------------------------------
101              United States      NULL
102              San Francisco      101

上記の SQL を使用すると、以下が返されます。

f_assetname      f_locationname
----------------------------------------
Building A       San Francisco
Building B       San Francisco

私が望む出力は次のようになります。

f_assetname      f_locationname         f_locationparentname
--------------------------------------------------------------
Building A       San Francisco          United States
Building B       San Francisco          United States

いかなる支援も、心から感謝します。

ありがとう、ビームス

4

2 に答える 2

4

別の結合を追加するだけです

SELECT a.f_assetname, p.f_locationname as parent, gp.f_locationname as grandparent
FROM tb_assets a
LEFT JOIN tb_locations p on a.f_assetlocationID = p.f_locationID
left join tb_locations gp on gp.f_locationID = p.f_locationparentID

SQLフィドル

于 2013-04-12T22:58:27.327 に答える
2

自己結合を使用する

Select a.f_assetname asset, p.f_locationname parent,
     gp.f_locationname grandParent
From tb_assets a
   Left Join tb_locations p 
       On  p.locationID = a_assetlocationID
   Left Join tb_locations gp 
       On  gp.locationID = p.f_locationParentId
于 2013-04-12T22:59:50.637 に答える