0

我有两个表要加入: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

SQLFiddle

于 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 回答