【问题标题】:Sql: Get Attributes by joining 3 tablesSql:通过加入3个表来获取属性
【发布时间】:2017-10-27 14:47:51
【问题描述】:

这是我的数据库架构:

我只是想选择一个病人的所有约会并得到以下结果集:

我已经尝试过以下加入:

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

但是我没有得到想要的输出!

【问题讨论】:

    标签: sql sql-server database select join


    【解决方案1】:

    您需要多次引用 User 表,因此您可以在同一结果记录中获得医生和患者的单独详细信息。只有当医生和患者是相同的用户时,你所拥有的才能显示结果。

    这进一步意味着您需要使用表别名,以便您可以区分您引用的 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 列似乎比单独的年、月、日等列更适合约会表。

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 2011-05-23
      • 2016-11-27
      • 2012-04-03
      • 2019-01-01
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      相关资源
      最近更新 更多