我有一个存储过程正在我的表中查找名为csScheduleAgents
的数据。当您第一次点击该页面时,它会抓取您的userID并检查该表以获取信息。它正在将employee表与所有记录一起加入。
我遇到的问题是,如果A.[empID]
不存在,则无法从B.[]
获取数据;所以加入失败了。
即使A.[empID]
没有记录,因为它仍然作为变量传递,我怎样才能使这个陈述有效。
SELECT A.[id],
A.[empID],
A.[shiftPref],
CONVERT (VARCHAR (20), A.[lastUpdated], 101) AS lastUpdated,
B.[firstName],
B.[lastName],
B.[SupEmpID],
B.[DepartmentDesc] + ' ' + B.[SkillSetDesc] as SkillSetDesc,
C.[firstName] + ' ' + C.[lastName] AS supervisor
FROM csScheduleAgents AS A
INNER JOIN
empTable AS B
ON B.[empID] = A.[empID]
INNER JOIN
empTable AS C
ON C.[empID] = B.[SupEmpID]
WHERE A.[empID] = @empID
FOR XML PATH ('details'), TYPE, ELEMENTS, ROOT ('root');
END
答案 0 :(得分:2)
您可以使用RIGHT JOIN
代替INNER JOIN
,还可以设置WHERE
子句,使用[empID]
表中的empTable
来过滤记录
SELECT A.[id],
A.[empID],
A.[shiftPref],
CONVERT (VARCHAR (20), A.[lastUpdated], 101) AS lastUpdated,
B.[firstName],
B.[lastName],
B.[SupEmpID],
B.[DepartmentDesc] + ' ' + B.[SkillSetDesc] as SkillSetDesc,
C.[firstName] + ' ' + C.[lastName] AS supervisor
FROM csScheduleAgents AS A
RIGHT JOIN
empTable AS B
ON B.[empID] = A.[empID]
RIGHT JOIN
empTable AS C
ON C.[empID] = B.[SupEmpID]
WHERE B.[empID] = @empID
FOR XML PATH ('details'), TYPE, ELEMENTS, ROOT ('root');
END
这将从右侧返回所有记录,即使左侧是NULL
。
答案 1 :(得分:0)
你需要一个RIGHT JOIN。
RIGHT JOIN关键字返回右表(table2)中的所有行, 使用左表(table1)中的匹配行。结果为NULL 在没有匹配的情况下在左侧。