我编写了一个存储过程,我的表包含来自同一个表的两个外键DISTRICTS
。
情景:我正在传递一个人的工作记录,该记录应该包含他最初的工作城市和地区,然后是当前的城市和地区。现在我想显示两者的区域名称,但我在连接中感到困惑,因为它从相同的区域表中选择数据
存储过程:
select
ServiceInfo.pk_ServiceInfo_ServiceInfoID,
ServiceInfo.fk_Districts_ServiceInfo_CurrentDistrictID,
ServiceInfo.fk_Districts_ServiceInfo_InitialDistrictID,
Districts.DistrictName
from
ServiceInfo
join
Districts on Districts.pk_Districts_DistrictID = ServiceInfo.fk_Districts_ServiceInfo_CurrentDistrictID
join
PersonalInfo on PersonalInfo.pk_PersonalInfo_ID = ServiceInfo.fk_PersonalInfo_ServiceInfo_PID
答案 0 :(得分:1)
我认为你需要第二次加入地区牌桌。与工作城市一起加入一次,加入当前城市一次。试试这个:
select
ServiceInfo.pk_ServiceInfo_ServiceInfoID,
ServiceInfo.fk_Districts_ServiceInfo_CurrentDistrictID,
currentdistrict.DistrictName,
ServiceInfo.fk_Districts_ServiceInfo_InitialDistrictID,
initialdistrict.DistrictName
from
ServiceInfo
join
Districts currentdistrict on Districts.pk_Districts_DistrictID = ServiceInfo.fk_Districts_ServiceInfo_CurrentDistrictID
join
Districts initialdistrict on Districts.pk_Districts_DistrictID = ServiceInfo.fk_Districts_ServiceInfo_InitialDistrictID
join
PersonalInfo on PersonalInfo.pk_PersonalInfo_ID = ServiceInfo.fk_PersonalInfo_ServiceInfo_PID
您会注意到我如何使用分区表的表别名来显示哪个versin正在查找当前,以及哪个版本正在查找初始值。
答案 1 :(得分:1)
尝试以下方法:
select s.pk_ServiceInfo_ServiceInfoID,
s.fk_Districts_ServiceInfo_CurrentDistrictID,
s.fk_Districts_ServiceInfo_InitialDistrictID,
d1.DistrictName as CurrentDistrictName,
d2.DistrictName as InitialDistrictName
from ServiceInfo si
join PersonalInfo p on p.pk_PersonalInfo_ID = s.fk_PersonalInfo_ServiceInfo
join Districts d1 on d1.pk_Districts_DistrictID = s.fk_Districts_ServiceInfo_CurrentDistrictID
join Districts d2 on d2.pk_Districts_DistrictID = s.fk_Districts_ServiceInfo_InitialDistrictID
请注意,我在每个表上都使用了别名,并确保每个地方都使用了表名,包括联接的ON
部分。
根据您的具体情况,您可能希望将区表的连接设为LEFT OUTER JOIN
。如果您希望查看 ServiceInfo 和/或 PersonalInfo 表格中的信息,即使区域表中没有记录两个外键字段中的值。目前,如果某个人/服务缺少任何外键,则不会返回任何记录。
答案 2 :(得分:0)
这就是你使用别名的方法。
SELECT s.pk_ServiceInfo_ServiceInfoID,
s.fk_Districts_ServiceInfo_CurrentDistrictID,
s.fk_Districts_ServiceInfo_InitialDistrictID,
d.DistrictName
FROM ServiceInfo s
JOIN Districts d
ON d.pk_Districts_DistrictID = s.fk_Districts_ServiceInfo_CurrentDistrictID
JOIN PersonalInfo p
ON p.pk_PersonalInfo_ID= s.fk_PersonalInfo_ServiceInfo_PID
您是否必须以某种方式修改查询,或者您只是想更轻松地阅读?