我有一个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";
所需的输出
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
答案 0 :(得分:4)
问题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
问题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
问题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
答案 1 :(得分:1)
如果这些查询返回具有相同结构的行(也就是说,如果第一个查询中的第一列是int,那么第二个查询中的第一列必须使用),您可以使用UNION将两个查询中的结果集添加到一起是一个int,等等)。在http://dev.mysql.com/doc/refman/5.1/en/union.html
中阅读所有相关内容一旦你编写了两个选择并用UNION语句加入它们,就可以将它用作GROUP BY或其他东西的子查询:
SELECT * FROM (
(SELECT 1 AS ticked, col1, col2 FROM table1 INNER JOIN table2 USING (col3))
UNION
(SELECT 0 AS ticked, col1, col2 FROM table1)
) AS combined_table /*derived tables need a unique name*/
GROUP BY col1 /*group by the unique col1 to stop duplicates*/
ORDER BY ticked DESC