Pat*_*obs 1 mysql group-by count multiple-tables
我有一个由 3 部分组成的问题,这给我带来了麻烦 我知道如果我一次查询 1 个表,如何让这些表正常工作,但我似乎无法弄清楚如何将tags和more_tags表结合起来以获得相同的结果.
下面列出了我遇到的 3 个主要问题。
问题1
我希望能够从tags和more_tags表中对相同的标签进行分组。
问题2
我还希望能够显示每个表中不存在于另一个表中的标签。
问题 3
我还想计算标签在tags和more_tags表格中出现的总次数。
MYSQL 表
SELECT `tags`.`tag_id`, `tags`.`tag_name`, COUNT(`tags`.`tag_name`) as 'num'
FROM `tags`
INNER JOIN `users` ON `tags`.`user_id` = `users`.`user_id`
WHERE `users`.`active` IS NULL
GROUP BY `tags`.`tag_name`
ORDER BY `tags`.`tag_name` ASC";
SELECT `more_tags`.`tag_id`, `more_tags`.`tag_name`, COUNT(`more_tags`.`tag_name`) as 'num'
FROM `more_tags`
INNER JOIN `users` ON `more_tags`.`user_id` = `users`.`user_id`
WHERE `users`.`active` IS NULL
GROUP BY `more_tags`.`tag_name`
ORDER BY `more_tags`.`tag_name` ASC";
Run Code Online (Sandbox Code Playgroud)
期望输出
tag_id tag_name num
10 apple 12
192 pear 1
197 bored 1
203 sad 3
207 ads 2
217 news 1
190 bf 1
196 cape 1
Run Code Online (Sandbox Code Playgroud)
问题1:
SELECT tag_id, tag_name, count(*)
FROM (
SELECT tag_id, tag_name FROM tags
UNION ALL
SELECT tag_id, tag_name FROM more_tags
) s
GROUP BY tag_id, tag_name
Run Code Online (Sandbox Code Playgroud)
问题2:
SELECT tag_id, tag_name, 'not present in more tags' as description
FROM tags LEFT JOIN more_tags ON tags.tag_id=more_tags.tag_id
WHERE more_tags.tag_id IS NULL
UNION ALL
SELECT tag_id, tag_name, 'not present in tags' as description
FROM tags RIGHT JOIN more_tags ON tags.tag_id=more_tags.tag_id
WHERE tags.tag_id IS NULL
Run Code Online (Sandbox Code Playgroud)
问题 3:
SELECT tag_id, tag_name, COUNT(*)
FROM tags INNER JOIN more_tags ON tags.tag_id=more_tags.tag_id
GROUP BY tag_id, tag_name
Run Code Online (Sandbox Code Playgroud)