带计数的SQL连接

时间:2012-10-12 05:25:00

标签: mysql sql

我有2张桌子;文章和article_shares(共享文章的次数)

我想显示用户的所有文章(ID 63)以及他们共享文章的次数(可能为0)

文章:

article_id - user_id  - title - date

Article_shares

article_id

我正在尝试以下但它只返回有共享的一行,但我想显示所有,即使共享的数量是0(在这种情况下有7篇文章)

SELECT *, DATE_FORMAT(a.date, '%d/%m/%y') as article_date, count(*) 
from articles a 
join article_shares ash on ash.article_id = a.article_id
where (a.user_id = '63') order by a.article_title asc

4 个答案:

答案 0 :(得分:4)

将您的联接更改为左联接

这样的东西
SELECT *, DATE_FORMAT(a.date, '%d/%m/%y') as article_date, count(*)  
from articles a  
left join article_shares ash on ash.article_id = a.article_id 
where (a.user_id = '63') order by a.article_title asc

看一下这个例子

SQL Fiddle DEMO

也许可以查看Introduction to JOINs – Basic of JOINs

答案 1 :(得分:3)

只需LEFT JOIN代替JOIN。它将为没有共享的文章创建NULL条目。

答案 2 :(得分:3)

join条件更改为LEFT JOIN并尝试。即使article_id在其中为空,这也将返回文章共享。

答案 3 :(得分:2)

你应该使用LEFT JOIN

SELECT *, DATE_FORMAT(a.date, '%d/%m/%y') as article_date, count(*) 
from articles a 
left join article_shares ash on ash.article_id = a.article_id
where (a.user_id = '63') order by a.article_title asc