2013-02-06 82 views
1

我有一個3部分問題,這給了我麻煩,我知道如何讓表工作,如果我一次查詢1表 ,但我似乎無法弄清楚我怎麼可以結合tagsmore_tags表獲得相同的結果。MySQL GROUP&COUNT多個表

我有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 
+0

check select union option ... – pedromarce

回答

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 
3

問題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