Sql 从5个表中获取数据
我有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查询以获取其中任何一个房间的订单以及完整信息。这意味着,如果我获取特定房间的订单,我需要知道在哪个建筑中,在哪个子单元中,在哪个单元中 如果我得到一个特定建筑的订单,我需要知道在不复制数据的情况下,在哪个子单元中安装,在哪个单元中安装等等 我试了很多问题,但都没用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)-注意(并非所有建筑都包含房
任何帮助因此,看起来您正在尝试创建一个表[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
。我想你需要一个左外连接