2013-04-24 197 views
0

我在SQL Server 2008中创建一个存储过程,以从第一个表中找到学生数据,从第二个表中查找学生数据,从第三个表中查找出勤细节。我想要使​​用左外连接或内连接来连接这些表。如何在SQL Server查询中连接两个以上的表

的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 
+1

那么是什么问题? – NetStarter 2013-04-24 06:16:41

+0

先阅读一些教程。 – Maximus 2013-04-24 06:37:45

回答

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。如果不需要,请将其移除。

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