2013-03-14 68 views
0

我有2個表,一個叫Doctor,一個叫Appointment。他們都有doctor_id共同的關係。我需要能夠生成一個醫生ID列表以及爲每位醫生預約的數量爲零或多個約會(請參閱圖片表內容) enter image description hereMySQL - 加入2個表以返回零結果

使用下面的代碼我可以列出醫生)身份證以及預約的次數,但不會顯示與醫生列表中的ZERO Appointment相同的醫生。我需要做什麼修改?

SELECT doctor_id, COUNT(DISTINCT appt_time) AS No_APP FROM appointment GROUP BY doctor_id; 

這是我從它那裏得到

enter image description here

回答

5

嘗試:

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

+1,但我認爲,在計數DISTINCT是沒用的。 – 2013-03-14 15:29:43

+0

@RaphaëlAlthaus你是對的,我刪除了DISTINCT。 – criticalfix 2013-03-14 15:31:44

+0

DISTINCT實際上會導致IMO錯誤的結果。在不同的日子裏,相同的預約時間呢? – Ejzy 2013-03-14 15:32:15

0

這應該工作:

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 
+0

這個工作呢!謝謝! – AbarthGT 2013-03-14 15:34:29

+0

儘管你應該刪除「不同的」,正如ejzy對另一個答案的評論所指出的那樣,它會(理論上)在不同的日子爲相同的約會時間給出錯誤的答案。在現實生活中可能不會發生,但最好保持邏輯清潔。 – criticalfix 2013-03-14 15:47:53

+0

真..我從來沒有用日期分割成日期和時間..所以當我看到原來的代碼,我沒有質疑.. – 2013-03-14 15:57:10

0

使用左連接:

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; 
+0

這是行不通的。 – AbarthGT 2013-03-14 15:34:55

+0

固定。謝謝。我還將appt_date添加到「distinct」列的列表中。我認爲這更符合你想要的。 – aingram 2013-03-21 18:03:35

1

使用左連接:

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; 

它應該做的伎倆

+0

這個工作以及謝謝! – AbarthGT 2013-03-14 15:35:20