从5个表中获取数据

时间:2017-01-18 20:58:57

标签: sql asp.net sql-server database

我有5个表包含城市信息(Unite包含(但不总是)子单元 - 子单元包含(但不总是)建筑物 - 并且建筑物包含(但不总是)房间

1-Unites:包括列:

Id(PK)

UniteName

...

2- SubUnites:包括列:

ID(PK)

名称

UniteId(Unites表中的ID为FK) - 注意(并非所有unite都包含sub unite) ....

3-建筑:包括栏目:

ID(PK)

名称

SubUniteId(SubUnites表中ID的FK) - 注意(并非所有unite sub unite都包含建筑物) ...

4-房间:包括栏目:

ID(PK)

名称

BuildingId(建筑表中ID的FK) - 注意(并非所有建筑物都包含房间) ....

5-订单:包括列:

ID

AreaId(可能是(Unite表中的ID列)或(SubUnites表中的ID列)或(Building表中的ID列)或(Rooms表中的ID列)

我可以通过其ID

为其中任何一个订购 问题: 我怎么能使sql选择查询获得任何有完整信息的订单..这意味着如果我得到一个特定的房间的订单,我需要知道在哪个建筑物和哪个子团结和在哪个团结  如果我得到一个特定建筑物的订单,我需要知道哪个子网站不同,哪个单元组合如此重复数据

我尝试了很多查询但没有工作

任何帮助

3 个答案:

答案 0 :(得分:0)

SELECT A.ID as unitid,A.Unitname as unitname,B.id as subuniteid,B.Name as subunitname,c.ID as buildingid,C.Name as buildingname,D.id as roomid,D.name as roomname,e.id as orderid,e.areaid
from
UniT A JOIN Subunit B
on A.Id=B.UnitId
Join Building c
on B.ID=C.Subunitid
Join Room D
ON C.ID=D.buildingid
Join Orders E 
on E.Id=A.Id

答案 1 :(得分:0)

所以看起来你正试图通过[AreaId]列创建一个表[Orders]来链接/关联到其他4个表。

问题是您没有提供列来指定每个特定订单记录与您相关的表。

将[订单]表拆分为4个单独的订单表,每个订单表都有一个订单,或提供一种方法,即[UniteOrders],[SubUniteOrders]等。使每个订单与单个订单关系

然后,如果您想要所有订单,您可以执行联合查询以从所有表中提取

另一个选择是使用GUID作为ID,然后你可以将它们存储在[AreaId]中,并确保在很大程度上没有重复。

GUID类型的SQL Server文档:

https://msdn.microsoft.com/en-us/library/ms187942.aspx

答案 2 :(得分:0)

我给这个镜头没有访问数据。如果这是你想要完成的事情,请告诉我。

Select 
  U.ID
, U.NAME
, U.UniteName
, O_FROM_U.*
, SU.ID
, SU.NAME
, SU.UniteID
, O_FROM_SU.*
, B.ID
, B.Name
, B.SubUniteID
, O_FROM_B.*
, R.ID
, R.Name
, R.BuildingID
, O_FROM_R.*

FROM
Unites U
LEFT OUTER JOIN SubUnites SU        ON SU.UNITEID = U.ID
LEFT OUTER JOIN Building B          ON B.SubUniteID = SU.ID
LEFT OUTER JOIN Rooms R             ON R.BuildingID = B.ID

LEFT OUTER JOIN ORDERS O_FROM_U     ON U.ID = O_FROM_U.AreaID
LEFT OUTER JOIN ORDERS O_FROM_SU    ON SU.ID = O_FROM_SU.AreaID
LEFT OUTER JOIN ORDERS O_FROM_B     ON B.ID = O_FROM_B.AreaID
LEFT OUTER JOIN ORDERS O_FROM_R     ON R.ID = O_FROM_R.AreaID