2013-02-06 5 views
1

3 파트 문제가 있습니다. 문제가 발생했습니다. 테이블 1 개를 쿼리하면 테이블을 가져 오는 방법을 알고 있습니다. 한 번에 할 수있는 것처럼 보일 수는 없습니다. 동일한 결과를 얻으려면 tagsmore_tags 테이블을 결합하십시오.MySQL GROUP & COUNT 다중 테이블

내가 가진 세 가지 주요 문제는 아래에 나열되어 있습니다.

문제 (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

체크 선택 조합 옵션 ... – pedromarce

답변

1

이러한 질의 (즉, 동일한 구조를 갖는 행을 반환 IFF에 두 쿼리에서 함께 결과 집합을 추가 UNION을 사용하여 첫 번째 쿼리의 첫 번째 열이 int 인 경우 두 번째 쿼리의 첫 번째 열은 int 여야합니다. 당신은 두 가지 선택을 작성하고 UNION 문을 가입 한 후에는 사용할 수 http://dev.mysql.com/doc/refman/5.1/en/union.html

에 대한 모든 읽기가 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