我在SQL Server2008中创建了一个存储过程,以便从第一个表中查找学生数据,从第二个表中查找健康详细信息,从第三个表中查找出勤详细信息。我想使用left outer或inner join连接这些表。
SQL-query如下:
create proc [dbo].[GetStdProfile]
@Adm_No int
AS
BEGIN
SELECT sd.*,hd.*,ad.*
FROM Student_Details sd left outer join Health_Details hd left outer join Attendance_Details ad
on sd.Adm_No=hd.Adm_No and sd.Adm_No = ad.Adm_No and hd.Adm_No=ad.Adm_No
END发布于 2013-04-24 14:21:26
像这样修改您的查询:
create proc [dbo].[GetStdProfile]
@Adm_No int
BEGIN
SELECT sd.*,hd.*,ad.*
FROM Student_Details sd
left outer join Health_Details hd on sd.Adm_No = hd.Adm_No
left outer join Attendance_Details ad on hd.Adm_No = ad.Adm_No
END注意:您尚未使用参数@Adm_No。如果不需要,请将其删除。
发布于 2013-04-24 14:22:23
如果您要执行select *,则不需要在它们前面加上前缀。我不知道您是否在运行过程时遇到了问题,但是joins首先和后来变得有点不正常。当您连接共享相同字段和id的表时,不需要将单个表连接到多个表。你让hd.Adm_No加入了sd.Adm_No和ad.Adm_no。通过执行以下操作,可以很容易地过滤掉这种关系:
create proc [dbo].[GetStdProfile]
@Adm_No int
AS
BEGIN
SELECT * FROM Student_Details sd left outer join Health_Details hd on
sd.Adm_No=hd.Adm_No left outer join Attendance_Details ad
on hd.Adm_No = ad.Adm_No
Where sd.Adm_No = @Adm_No;
ENDhttps://stackoverflow.com/questions/16184639
复制相似问题