mysql-连接两个表以从同一表的另一行获取数据

时间:2020-06-20 15:48:23

标签: mysql join left-join

我有两个名为usersrequests的表,其结构如下:

用户:

+----+----------+------------------------+
| id | name     | email                  |
+----+----------+------------------------+
| 1  | super    | super@test.com         |
+----+----------+------------------------+
| 2  | david    | david@test.com         |
+----+----------+------------------------+
| 3  | smith    | smith@test.com         |
+----+----------+------------------------+
| 4  | philip   | philip@test.com        |
+----+----------+------------------------+

请求:

+----+---------+----------------------+
| id | inviter | email                |
+----+---------+----------------------+
| 1  | 1       | david@test.com       |
+----+---------+----------------------+
| 2  | 2       | smith@test.com       |
+----+---------+----------------------+
| 3  | 2       | philip@test.com      |
+----+---------+----------------------+

现在我要联接这两个表以获取数据,如下所示:

+----+----------+------------------------+-----------+
| id | name     | email                  | inviter   |
+----+----------+------------------------+-----------+
| 1  | super    | super@test.com         | null      |
+----+----------+------------------------+-----------+
| 2  | david    | david@test.com         | super     |
+----+----------+------------------------+-----------+
| 3  | smith    | smith@test.com         | david     |
+----+----------+------------------------+-----------+
| 4  | philip   | philip@test.com        | david     |
+----+----------+------------------------+-----------+

两个表将在email属性上联接。结果表中的inviter字段是id属性下requests表中存储的相应inviter的用户名。

我已经写了这个查询

select users.id as id, name, users.email as email, name, inviter
from users
left join requests on users.email = requests.email

产生以下结果

+----+--------+-----------------+--------+---------+
| id | name   | email           | name   | inviter |
+----+--------+-----------------+--------+---------+
|  2 | david  | david@test.com  | david  |       1 |
|  3 | smith  | smith@test.com  | smith  |       2 |
|  4 | philip | philip@test.com | philip |       2 |
|  1 | super  | super@test.com  | super  |    NULL |
+----+--------+-----------------+--------+---------+

有人可以帮助我编写查询以获取所需数据吗?

3 个答案:

答案 0 :(得分:1)

您必须再次将users分别加入requestsusers才能获得inviter的名称:

select u.*, u2.name inviter
from users u 
left join requests r on r.email = u.email
left join users u2 on u2.id = r.inviter
order by u.id

请参见demo
结果:

| id  | name   | email           | inviter |
| --- | ------ | --------------- | ------- |
| 1   | super  | super@test.com  |         |
| 2   | david  | david@test.com  | super   |
| 3   | smith  | smith@test.com  | david   |
| 4   | philip | philip@test.com | david   |

答案 1 :(得分:1)

您需要对用户表使用两次左联接来获取此信息,请参考下面的数据库小提琴和查询

SELECT US.*, US1.name 
FROM users AS US 
LEFT JOIN requests AS RQ ON RQ.email = US.email
LEFT JOIN users AS US1 ON US1.id = RQ.inviter

数据库链接:HERE

答案 2 :(得分:0)

您需要再次连接表users才能获得邀请者的名字。例如:

select
  u.*,
  u2.name as inviter
from users u
left join requests r on r.email. = u.email
left join users u2 on u2.id = r.inviter
order by u.id
相关问题