【发布时间】:2014-06-16 18:04:38
【问题描述】:
目标
正确连接 3 个表以创建列表视图,用于快速识别标签的创建者、使用时间和使用次数。
餐桌设计
表:tags
id tag type submitted_on submitted_by
------------------------------------------------------------------
1 tag1 type1 0000-00-00 00:00:00 1
2 tag2 type1 0000-00-00 00:00:00 1
3 tag3 type1 0000-00-00 00:00:00 1
4 tag4 type1 0000-00-00 00:00:00 1
5 tag5 type1 0000-00-00 00:00:00 1
表:tagmap
id tag type tl users comms events submitted_on submitted_by
----------------------------------------------------------------------------------------------------
1 1 type1 2 0 0 0 0000-00-00 00:00:00 1
2 1 type1 156 0 0 0 0000-00-00 00:00:00 1
3 2 type1 2 0 0 0 0000-00-00 00:00:00 1
4 3 type1 2 0 0 0 0000-00-00 00:00:00 1
表:users
id first last
-----------------------
1 John Doe
查询
SELECT
tags.id AS tagid,
tags.tag,
tags.submitted_on AS date,
CONCAT(users.first, ' ', users.last) AS username,
count(tm.tl) AS tls,
count(tm.user) AS users,
count(tm.comm) AS comms,
count(tm.event) AS events
FROM tags
LEFT JOIN users
ON users.id = tags.submitted_by
LEFT JOIN tagmap AS tm
ON tags.id = tm.tag
GROUP BY tm.tag
ORDER BY tags.id ASC
结果
tagid tag date username tls users comms events
--------------------------------------------------------------------------------------
1 tag1 0000-00-00 00:00:00 John Doe 2 0 0 0
2 tag2 0000-00-00 00:00:00 John Doe 1 0 0 0
3 tag3 0000-00-00 00:00:00 John Doe 1 0 0 0
4 tag4 0000-00-00 00:00:00 John Doe 0 0 0 0
预期结果
tagid tag date username tls users comms events
--------------------------------------------------------------------------------------
1 tag1 0000-00-00 00:00:00 John Doe 2 0 0 0
2 tag2 0000-00-00 00:00:00 John Doe 1 0 0 0
3 tag3 0000-00-00 00:00:00 John Doe 1 0 0 0
4 tag4 0000-00-00 00:00:00 John Doe 0 0 0 0
5 tag5 0000-00-00 00:00:00 John Doe 0 0 0 0
问题
当tags 总数为 5 时,查询仅返回 4 行。 tag4 和 tag5 都没有连接,但仍然返回 tag4。无论tagmap 表中是否有任何连接,我都需要返回所有tags。
问题
无论tagmap 连接如何,如何正确编写此查询以包含所有tags?
提前致谢!
【问题讨论】:
标签: mysql sql tags relational-database left-join