我有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选择查询获得任何有完整信息的订单..这意味着如果我得到一个特定的房间的订单,我需要知道在哪个建筑物和哪个子团结和在哪个团结 如果我得到一个特定建筑物的订单,我需要知道哪个子网站不同,哪个单元组合如此重复数据我尝试了很多查询但没有工作
任何帮助
答案 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文档:
答案 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