Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从5个表中获取数据_Sql_Asp.net_Sql Server_Database - Fatal编程技术网

Sql 从5个表中获取数据

Sql 从5个表中获取数据,sql,asp.net,sql-server,database,Sql,Asp.net,Sql Server,Database,我有5个表包含城市信息(联合包含(但不总是)子单元-子单元包含(但不总是)建筑-和建筑包含(但不总是)房间 1-单位:包括列: Id(主键) 单位名称 2-子单元:包括列: ID(主键) 名字 UniteId(单位表中ID的FK)-注意(并非所有单位都包含子单位) 3-建筑:包括柱: ID(主键) 名字 子单元ID(子单元表中ID的FK)-注意(并非所有单元子单元都包含建筑) 4-房间:包括柱: ID(主键) 名字 BuildingId(FK表示建筑表中的ID)-注意(并非所有建筑都包含房

我有5个表包含城市信息(联合包含(但不总是)子单元-子单元包含(但不总是)建筑-和建筑包含(但不总是)房间

1-单位:包括列:

Id(主键)

单位名称

2-子单元:包括列:

ID(主键)

名字

UniteId(单位表中ID的FK)-注意(并非所有单位都包含子单位)

3-建筑:包括柱:

ID(主键)

名字

子单元ID(子单元表中ID的FK)-注意(并非所有单元子单元都包含建筑)

4-房间:包括柱:

ID(主键)

名字

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

5-订单:包括列:

身份证

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

我可以通过它的ID订购任何一个

问题: 如何进行sql select查询以获取其中任何一个房间的订单以及完整信息。这意味着,如果我获取特定房间的订单,我需要知道在哪个建筑中,在哪个子单元中,在哪个单元中 如果我得到一个特定建筑的订单,我需要知道在不复制数据的情况下,在哪个子单元中安装,在哪个单元中安装等等

我试了很多问题,但都没用


任何帮助

因此,看起来您正在尝试创建一个表[Orders],该表将通过[AreaId]列链接/关联其他4个表

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
问题是您没有提供任何一列来指定与每个特定订单记录相关的表

将[Orders]表拆分为4个单独的Orders表,每个表都有一个订单,或提供一种方法,即[UniteOrders]、[SubUniteOrders]等,使每个表成为一个单位对多个订单的关系

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

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

GUID类型上的SQL Server文档:


我将在无法访问数据的情况下对此进行尝试。如果这是您试图实现的目标,请告诉我

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

你只是在寻找
JOIN
关键字吗?你尝试了什么?像这里大多数其他人指出的那样搜索
JOIN
。我想你需要一个
左外连接