2013-04-24 168 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