1

私は 3 つの問題に悩まされています。一度に 1 つのテーブルをクエリする場合にテーブルを機能させる方法は知っていますが、tagsmore_tagsテーブルの両方を組み合わせて同じ結果を得る方法がわかりません。 .

私が持っている3つの主な問題は以下のとおりです。

問題1

tagsmore_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
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 を使用して、2 つのクエリからの結果セットを一緒に追加できます (つまり、最初のクエリの最初の列が int の場合、2 番目のクエリの最初の列は int でなければなりません)。 、 等々)。http://dev.mysql.com/doc/refman/5.1/en/union.htmlでそれについてすべて読んでください

2 つの select を記述して 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 に答える