一个表中没有记录时的多表查询

时间:2013-01-10 18:04:43

标签: sql postgresql

如果我愿意,我该怎么办?

目前,有表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中没有记录)?

2 个答案:

答案 0 :(得分: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.   
  3. ON
  4.   
  5. JOIN
  6.   
  7. WHERE
  8.   
  9. GROUP BY
  10.   
  11. HAVING
  12.   
  13. 选择
  14.   
  15. ORDER BY
  16.   

答案 1 :(得分:0)

需要进行左连接以维护表A中的记录而不管B:

PostgreSQL: left outer join syntax

需要汇总B中的记录数:

PostgreSQL GROUP BY different from MySQL?