0

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

2 回答 2

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

于 2013-04-24T06:21:26.270 回答
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
于 2013-04-24T06:22:22.877 回答