2016-04-17 28 views
0

この質問はあまりにも長いので、事前に感謝します!UNIONを使用して3つのテーブルを結合するMySQL

はじめ

私は現在、多対多の関係を使用して3つのテーブルを持っています。私はすべての3つのテーブルを照会し、それらを1つのテーブルに結合する必要があります。


問題

私はこのクエリを試してみました:

SELECT * FROM `login` LEFT JOIN membership ON login.id = membership.login_id UNION SELECT * FROM `login` RIGHT JOIN membership ON login.id = membership.login_id 

そして、それは返します

+----+------+----------+ 
| id | name | group_id | 
+----+------+----------+ 
| 1 | Tom |  6 | 
| 2 | John |  8 | 
| 3 | Jane |  4 | 
+----+------+----------+ 

質問

group_nameも含める必要があります。これは私の所望の出力です:

+----+------+----------+------------+ 
| id | name | group_id | group_name | 
+----+------+----------+------------+ 
| 1 | Tom |  6 | Red  | 
| 2 | John |  8 | Brown  | 
| 3 | Jane |  4 | Purple  | 
+----+------+----------+------------+ 

テーブル

login

自動インクリメントIDを持つすべてのユーザーのリスト

+----+------+ 
| id | name | 
+----+------+ 
| 1 | Tom | 
| 2 | John | 
| 3 | Jane | 
+----+------+ 

group

ユーザがTに属する上group_idgroup_name

+----------+------------+ 
| group_id | group_name | 
+----------+------------+ 
|  1 | Green  | 
|  2 | Blue  | 
|  3 | Yellow  | 
|  4 | Purple  | 
|  5 | Orange  | 
|  6 | Red  | 
|  7 | Pink  | 
|  8 | Brown  | 
+----------+------------+ 

membership

格納情報を持つすべてのグループのリストOグループ

+----------+----------+ 
| login_id | group_id | 
+----------+----------+ 
|  1 |  6 | 
|  2 |  8 | 
|  3 |  4 | 
+----------+----------+ 
+0

は、一般的に言えば、あなたはそこから "常に" 存在し、その後 'LEFT JOIN'' FROM'句で参照されているものは何でもテーブルにする必要があります - あなたの実際のデータ接続についての推論をはるかに簡単にするでしょう。 –

答えて

2

は、同様にgroupテーブルに参加して、テーブルから必要なフィールドを選択しています。

SELECT l.id,l.name,m.group_id,g.group_name 
FROM `login` l 
LEFT JOIN `membership` m ON l.id = m.login_id 
LEFT JOIN `group` g on g.group_id = m.group_id 
+0

これはまさに私が欲しかったことです、ありがとうございました! – Panda

+0

私はあなたが 'left join'ではなく' join group'に参加しなければならないと思っています – Mahmoud

+0

ログインテーブルに加わっているので、ここでは関係ありません。だから、それはそのテーブルからのすべてのログインIDしか持たないでしょう。 –

2

これを試してみてください... :)

SELECT 
    `login`.`id`, 
    `login`.`name`, 
    `group`.`group_id`, 
    `group`.`group_name` 
FROM 
    `membership` 
    INNER JOIN `login` ON (`membership`.`login_id` = `login`.`id`) 
    INNER JOIN `group` ON (`membership`.`group_id` = `group`.`group_id`) 
関連する問題