2016-04-17 17 views
0

Diese Frage ist ein wenig lang, so dass es klar wäre, danke im Voraus!MySQL Beitritt 3 Tabellen mit UNION

Einführung

Ich habe derzeit drei Tabellen eine many-to-many-Beziehung verwenden. Ich muss alle 3 Tabellen abfragen und sie in 1 Tabelle kombinieren.


Problem

Ich habe diese Abfrage versucht:

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 

Und es gibt:

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

Frage

Ich brauche es auch die group_name enthalten. Dies ist meine gewünschte Ausgabe:

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

Tabellen

login Tabelle

Eine Liste aller Benutzer mit Autoinkrement-ID

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

group Tabelle

Eine Liste aller Gruppen mit der group_id und group_name

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

membership Tabelle

Speichern Informationen, auf die Benutzer t gehören o welche Gruppe

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

Generell sollten Sie in der 'FROM' Klausel Gebrauch machen, was Tabelle verwiesen wird "immer" vorhanden, und' LINKS JOIN' dann von dort - Es wird viel einfacher über Ihre tatsächlichen Datenverbindungen nachzudenken. –

Antwort

2

Join the group Tabelle als auch ein und wählen Sie die erforderlichen Felder aus den Tabellen.

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

Genau das wollte ich, vielen Dank! – Panda

+0

Ich denke, Sie müssen "Join Group" nicht "Left Join" – Mahmoud

+0

ist es hier nicht wichtig, wie Sie links Beitritt zur Login-Tabelle sind.Also würde es nur alle Login-IDs von dieser Tabelle haben. –

2

Try this ... :)

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`)