1

我有一个 3 部分的问题,这给我带来了麻烦我知道如果我一次查询 1 个表,如何让表工作,但我似乎无法弄清楚如何将表tagsmore_tags表结合起来以获得相同的结果.

下面列出了我遇到的 3 个主要问题。

问题 1

我希望能够从tagsmore_tags表中对相同的标签进行分组。

问题 2

我还希望能够显示每个表中不存在于另一个表中的标签。

问题 3

我还想计算标签出现在tagsmore_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
4

2 回答 2

5

问题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
于 2013-02-06T19:27:26.993 回答
1

您可以使用 UNION 将两个查询的结果集相加,前提是这些查询返回具有相同结构的行(即,如果第一个查询中的第一列是 int,则第二个查询中的第一列必须是 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
于 2013-02-06T19:24:48.677 回答