如何在sql server查询中加入两个以上的表

时间:2013-04-24 06:14:14

标签: database sql-server-2008 left-join inner-join

我在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

2 个答案:

答案 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