2017-05-26 73 views
1

獲取屬性這是我的數據庫架構:SQL:通過連接3臺

enter image description here

我只是想選擇一個病人的所有的約會,並得到以下結果集:

enter image description here

我曾嘗試以下加入:

SELECT [User].user_id,name, surname, [Appointment].day,[Appointment].month,[Appointment].year,[Appointment].hour,[Appointment].minutes 
FROM [User] 
LEFT JOIN [Doctor] ON [Doctor].user_id = [User].user_id 
LEFT JOIN [Patient] ON [Patient].user_id = [User].user_id 
LEFT JOIN [Appointment] ON [Doctor].doctor_id = [Appointment].doctor_id and [Patient].patient_id = [Appointment].patient_id 

但我沒有得到所需的輸出!

回答

2

您需要多次引用用戶表,因此您可以在相同的結果記錄中爲醫生和患者分別獲取詳細信息。當您的醫生和患者是相同的用戶時,您擁有的只能顯示結果。

這還意味着您需要使用表別名,以便您可以區分您所引用的用戶表的哪個實例。它看起來像一個INNER JOIN比在這裏的LEFT JOIN更合適。

既然問題聲明表示病人爲起點,我會把這作爲你的第一個/ FROM表,並從那裏:

SELECT a.appointment_id "Appointment ID", ud.name + ' ' + ud.surname "Doctor Name", 
    up.name + ' ' + up.surname "Patient Name", 
    a.Day, a.Month, a.Year, a.Hour, a.Minute 
FROM Patient p 
INNER JOIN User up ON up.user_id = p.user_id 
INNER JOIN Appointments a ON a.patient_id = p.patient_id 
INNER JOIN Doctor d on d.doctor_id = a.doctor_id 
INNER JOIN User ud ON ud.user_id = d.user_id 

最後,這似乎是一個DateTime列好得多適用於Appointments表格,而不是單獨的Year,Month,Day等列。