2017-05-26 5 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

ユーザテーブルを複数回参照する必要があるため、同じ結果レコード内の医者と患者の個別の詳細を得ることができます。あなたが持っているものは、医者と患者がと同じユーザの場合にのみ結果を表示できます。

これはさらに、テーブルエイリアスを使用する必要があることを意味しているため、参照しているUserテーブルのインスタンスを区別することができます。 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列がはるかに優れているように最後に、それはそう年、月、日などの別の列よりも予定表に適しています。

関連する問題