MySQL 使用 UNION 连接 3 个表

MySQL joining 3 tables using UNION

这个问题有点长,这样就清楚了,先谢谢了!

简介

我目前有 3 个 table 使用多对多关系。我需要查询所有 3 个 table 并将它们组合成 1 个 table.


问题

我试过这个查询:

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

它 returns:

+----+------+----------+
| 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     |
+----+------+----------+------------+

Tables

login Table

A list of all users with auto-increment id

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

group Table

A list of all groups with the group_id and group_name

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

membership Table

Stores information on which user belongs to which group

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

同时加入 group table 和 select table 中的必填字段。

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

试试这个...:)

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