MySQL 两个 table 内连接并计数
MySQL two table inner join and count
我有两个表:
// bookmark
| id | user | title |
// bookmarkItem
| itemID | bookmarkId |
我尝试从一个用户的所有书签中 select 并计算其中有多少项。
我有一半工作 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
但它不会用零书签项写入书签。我想要的是显示这些行,例如:
| id | title | count |
|----|-------|-------|
| 12 | asdfg | 15 |
| 13 | asdfh | 0 |
| 14 | asdfj | 145 |
这是因为您只有 select 个具有匹配书签项的书签。 (这就是 INNER JOIN 的工作原理。您需要一个 OUTER JOIN。)
改变
INNER JOIN
至
LEFT JOIN
这样也可以得到没有书签项的书签。
对书签使用 LEFT JOIN table。这将给出书签 table 中的所有记录,即使 bookmarkItem 没有任何匹配的记录。
我有两个表:
// bookmark
| id | user | title |
// bookmarkItem
| itemID | bookmarkId |
我尝试从一个用户的所有书签中 select 并计算其中有多少项。 我有一半工作 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
但它不会用零书签项写入书签。我想要的是显示这些行,例如:
| id | title | count |
|----|-------|-------|
| 12 | asdfg | 15 |
| 13 | asdfh | 0 |
| 14 | asdfj | 145 |
这是因为您只有 select 个具有匹配书签项的书签。 (这就是 INNER JOIN 的工作原理。您需要一个 OUTER JOIN。)
改变
INNER JOIN
至
LEFT JOIN
这样也可以得到没有书签项的书签。
对书签使用 LEFT JOIN table。这将给出书签 table 中的所有记录,即使 bookmarkItem 没有任何匹配的记录。