2013-01-10 48 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

相关问题