Mysql 联接两个表以返回结果为零的查询

Mysql 联接两个表以返回结果为零的查询,mysql,sql,Mysql,Sql,我有两张桌子,一张叫医生,一张叫预约。他们都有医生的身份证。我需要能够生成一个医生ID列表,以及每个医生零次或多次预约的预约次数。(表格内容见图片) 使用下面的代码,我可以得到医生(id)列表以及预约次数,但它不会像医生列表中那样显示零预约的医生。我需要做什么修改 SELECT doctor_id, COUNT(DISTINCT appt_time) AS No_APP FROM appointment GROUP BY doctor_id; 这就是我从中得到的 试试: 尝试: 这应该起作用

我有两张桌子,一张叫医生,一张叫预约。他们都有医生的身份证。我需要能够生成一个医生ID列表,以及每个医生零次或多次预约的预约次数。(表格内容见图片)

使用下面的代码,我可以得到医生(id)列表以及预约次数,但它不会像医生列表中那样显示零预约的医生。我需要做什么修改

SELECT doctor_id, COUNT(DISTINCT appt_time) AS No_APP FROM appointment GROUP BY doctor_id;
这就是我从中得到的

试试:

尝试:

这应该起作用:

select 
  d.doctor_id
  ,count(distinct a.appt_time) as No_APP 
from doctor d 
left join appointment a on d.doctor_id=a.doctor_id
group by d.doctor_id
这应该起作用:

select 
  d.doctor_id
  ,count(distinct a.appt_time) as No_APP 
from doctor d 
left join appointment a on d.doctor_id=a.doctor_id
group by d.doctor_id
使用左连接:

SELECT doctor.doctor_id, COUNT(DISTINCT appt_date, appt_time) AS No_APP 
FROM doctor 
LEFT JOIN appointment
ON doctor.doctor_id = appointment.doctor_id
GROUP BY doctor_id;
SELECT doctor.doctor_id, COUNT(appt_time) AS No_APP FROM doctor LEFT JOIN appointment ON doctor.doctor_id = appointment.doctor_id GROUP BY doctor.doctor_id;
使用左连接:

SELECT doctor.doctor_id, COUNT(DISTINCT appt_date, appt_time) AS No_APP 
FROM doctor 
LEFT JOIN appointment
ON doctor.doctor_id = appointment.doctor_id
GROUP BY doctor_id;
SELECT doctor.doctor_id, COUNT(appt_time) AS No_APP FROM doctor LEFT JOIN appointment ON doctor.doctor_id = appointment.doctor_id GROUP BY doctor.doctor_id;
使用左连接:

SELECT doctor.doctor_id, COUNT(DISTINCT appt_date, appt_time) AS No_APP 
FROM doctor 
LEFT JOIN appointment
ON doctor.doctor_id = appointment.doctor_id
GROUP BY doctor_id;
SELECT doctor.doctor_id, COUNT(appt_time) AS No_APP FROM doctor LEFT JOIN appointment ON doctor.doctor_id = appointment.doctor_id GROUP BY doctor.doctor_id;
它应该做到这一点

使用左连接:

SELECT doctor.doctor_id, COUNT(DISTINCT appt_date, appt_time) AS No_APP 
FROM doctor 
LEFT JOIN appointment
ON doctor.doctor_id = appointment.doctor_id
GROUP BY doctor_id;
SELECT doctor.doctor_id, COUNT(appt_time) AS No_APP FROM doctor LEFT JOIN appointment ON doctor.doctor_id = appointment.doctor_id GROUP BY doctor.doctor_id;

它应该做到这一点

DISTINCT在不同的日子里实际上会产生错误的结果。那么不同的日子里相同的预约时间呢?DISTINCT在不同的日子里实际上会产生错误的结果。那么不同的日子里相同的预约时间呢正如ejzy对另一个答案的评论所指出的,对于不同日期的相同约会时间,给你错误的答案。在现实生活中可能不会发生,但最好保持逻辑清晰。没错。。我从来没有使用过日期和时间的分割。。因此,当我看到原始代码时,我没有提出问题。但是,你应该删除“distinct”,因为它(理论上)会为不同日期的相同约会时间给出错误的答案,正如ejzy对另一个答案的评论所指出的。在现实生活中可能不会发生,但最好保持逻辑清晰。没错。。我从来没有使用过日期和时间的分割。。所以当我看到原始代码时,我没有质疑..修正了。谢谢我还将appt_date添加到“distinct”列的列表中。我认为这更符合您的要求。已修复。谢谢我还将appt_date添加到“distinct”列的列表中。我认为这更符合你的要求。