【问题标题】:MySQL joining 3 tables using UNIONMySQL 使用 UNION 连接 3 个表
【发布时间】:2016-08-08 21:53:09
【问题描述】:

这个问题有点长,希望清楚,提前谢谢!

简介

我目前有 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

带有group_idgroup_name 的所有组的列表

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

membership

存储有关哪个用户属于哪个组的信息

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

【问题讨论】:

  • 一般来说,您应该使FROM 子句“始终”中引用的任何表出现,然后从那里出现LEFT JOIN - 这将使您对实际数据连接的推理更加容易。

标签: mysql sql database join union


【解决方案1】:

也加入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

【讨论】:

  • 我认为你必须join group 而不是left join
  • 这里没关系,因为您将加入登录表。因此,它只会包含该表中的所有登录 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`)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2023-03-03
    • 1970-01-01
    • 2012-11-18
    • 2014-02-04
    相关资源
    最近更新 更多