mysql - 用父子关系连接三个表

标签 mysql sql join

假设我们有四个表,结构如下(表名 - 字段):

person - id, name
doctor - id_person, specialty
pacient - id_person, disease
appointment - doctor_id, pacient_id, date

如何构造一个查询来返回医生的姓名和专业、患者的姓名和疾病以及预约日期?

这是我到目前为止所得到的:

SELECT person.name, doctor.specialty, pacient.disease, appointment.date
FROM appointment
INNER JOIN person
ON appointment.pacient_id=person.id
INNER JOIN doctor
ON appointment.doctor_id=doctor.id_person
INNER JOIN pacient
ON appointment.pacient_id=pacient.id_person

但这并没有返回正确的字段。我认为问题在于为同一行中的两个不同 id(doctor 和 pacient)返回相同的字段(person.name)。

最佳答案

您需要对 person 表进行两次单独的联接,并使用别名来标识各个表,如下所示:

select 
    dp.name as DoctorName
  , doctor.specialty
  , pp.name as PacientName
  , pacient.disease
  , appointment.date
from appointment

  inner join doctor
   on appointment.doctor_id = doctor.id_person
  inner join person dp
   on appointment.doctor_id = dp.id

  inner join pacient
   on appointment.pacient_id = pacient.id_person
  inner join person pp
   on appointment.pacient_id = pp.id

关于mysql - 用父子关系连接三个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42888058/

相关文章:

sql 双向连接

MYSQL/SQLWave - 从 Join 生成不同的数据

php - 为什么在 User::first() 上调用方法有效,但 User::where(...) 无效?

sql - 公式器具作为 SR

html - HTML 行结果的 XSL 替代背景颜色基于 SQL 查询填充的节点元素的变化值

php - mySQL COUNT 与两个表上的 JOIN

php - 如何使用一个参数从PHP中的url中识别variables_x列表?

mysql - 数据库中的罗马尼亚语变音符号

php - Laravel Eloquent leftJoin 在 whereIn 查询中

sql - 在oracle中生成一个字母序列