繁体   English   中英

MySQL三表联接

[英]MySQL three-table join

我有三个表,分别称为ClinicDoctorClinic_has_Doctor 假设两个表ClinicDoctor字段idname如下:

Clinic 
+----+------------------------+
| id | name                   |
+----+------------------------+

Doctor
+----+------------------------+
| id | name                   |
+----+------------------------+

Clinic_has_Doctor是一个简单的表,其中包含诊所和医生之间的映射:

Clinic_has_Doctor
+-----------+-----------------+
| Clinic_id | Doctor_id       |
+-----------+-----------------+

预期是ClinicDoctor ID的外键。 我需要获得诊所和沿途医生的名单。 所以我会有一张像这样的表:

+-----------+--------------+------------+--------------+
| Clinic_id | Clinic_name  | Doctor_id  | Doctor_name  |
+-----------+--------------+------------+--------------+

我没有做太多的JOIN SQL命令,所以我无法摆脱这个问题。 有什么帮助吗?

您将需要使用Clinic_has_Doctor JOIN表以将Clinic连接到Doctor表:

select c.id ClinicId,
  c.name ClinicName,
  d.id DoctorId,
  d.name Doctor_name
from clinic c
inner join Clinic_has_Doctor cd
  on c.id = cd.clinic_id
inner join doctor d
  on cd.Doctor_id = d.id

如果您需要学习JOIN语法的帮助,那么这里是有关联接的直观说明

我在查询中使用了INNER JOIN ,它将返回所有Clinics以及与之关联的医生。

如果即使没有关联的医生也要返回Clinics列表,则可以使用LEFT JOIN

select c.id ClinicId,
  c.name ClinicName,
  d.id DoctorId,
  d.name Doctor_name
from clinic c
left join Clinic_has_Doctor cd
  on c.id = cd.clinic_id
left join doctor d
  on cd.Doctor_id = d.id

应该是这样的:

select clinic_has_doctor.clinic_id
     , clinic.clinic_name
     , clinic_has_doctor.doctor_id
     , doctor.doctor_name
from   clinic_has_Doctor 
join   clinic 
on     clinic.id=clinic_has_Doctor.clinic_id
join   doctor
on     doctor.id=clinic_has_Doctor.doctor_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM