MySQL两个表内连接和计数

时间:2015-08-31 10:06:04

标签: mysql sql count inner-join

我有两张桌子:

// bookmark
| id | user | title |

// bookmarkItem
| itemID | bookmarkId |

我尝试从一个用户的所有书签中进行选择,并计算其中有多少项。 我有半个工作sql:

SELECT
    bookmark.id,
    bookmark.title,
    COUNT(bookmarkItem.itemId) AS count
FROM
    bookmark
    INNER JOIN bookmarkItem ON bookmark.id = bookmarkItem.bookmarkId
WHERE
    bookmark.user = 'username'
GROUP BY
    bookmark.id

但是它没有用bookmarkItem-s写出书签。我想要的是显示行,如:

| id | title | count |
|----|-------|-------|
| 12 | asdfg |   15  |
| 13 | asdfh |   0   |
| 14 | asdfj |  145  |

2 个答案:

答案 0 :(得分:2)

这是因为您只选择具有匹配书签项目的书签。 (这是 INNER JOIN 的工作原理。您需要 OUTER JOIN 。)

更改

INNER JOIN 

LEFT JOIN

以便获得没有书签项目的书签。

答案 1 :(得分:0)

在书签表上使用LEFT JOIN。这将给出书签表中的所有记录,即使bookmarkItem没有任何匹配的记录。