我在SQL Server 2008中创建一个存储过程,用于查找第一个表中的学生数据,第二个表中的健康详细信息以及第三个表中的出勤详细信息。我想使用左外连接或内连接来连接这些表。
SQL查询如下:
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
答案 0 :(得分:2)
改变您的查询:
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
。如果不需要,请将其删除。
答案 1 :(得分:0)
如果您要进行选择*,则无需为它们添加前缀。我不知道你是否在运行你的程序时遇到了问题,但是首先加入并稍后加入了一些麻烦。当您连接共享相同字段和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;
END