2013-01-10 49 views
2

如果我想,我應該怎麼辦:當在一個表中沒有記錄的多表查詢

目前,有表A和表B,

A: 
id, name, address   //the id is unique 
B 
id, contact, email 

因爲一個人可能有多個聯繫人和電子郵件,或者沒有接觸和電子郵件(這意味着表B中沒有記錄)

現在,我要爲每一個ID統計有多少記錄,甚至爲0: 而結果會是這樣的:

id, name, contact_email_total_count 

我如何能做到這一點(現在我想不通的地方是怎麼算0的記錄,因爲在表B中沒有記錄)?

+0

表A和B之間的關係如何?對我來說,看起來如果你離開了加入,那麼你將能夠得到計數。 – DevelopmentIsMyPassion

回答

2

對於你將要使用LEFT JOIN,然後添加一個總的話和GROUP BY

select a.id, 
    a.name, 
    count(b.id) as contact_email_total_count 
from tablea a 
left join tableb b 
    on a.id = b.id 
group by a.id, a.name 

SQL Fiddle with Demo

如果您需要幫助學習加入這裏的語法是一個偉大的visual explanation of joins

基於您的評論典型order of execution如下:

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. HAVING
  7. 選擇
  8. ORDER BY
+0

我不知道爲什麼它仍然能夠即使沒有這樣的表B中的ID加入,當加入發生,也不會滿足「上a.id = b.id」 – Kuan

+0

@Kuan是的點'LEFT JOIN'左邊'tableA'上的表將返回所有記錄,即使它不存在於'tableb'中。 – Taryn

+0

不客氣,我很樂意提供幫助。 :) – Taryn

相關問題