mysql-连接两个表以从其他行的相同表中获取数据

mysql-连接两个表以从其他行的相同表中获取数据,mysql,join,left-join,Mysql,Join,Left Join,我有两个名为users和requests的表,结构如下: +----+----------+------------------------+-----------+ | id | name | email | inviter | +----+----------+------------------------+-----------+ | 1 | super | super@test.com | null | +

我有两个名为
users
requests
的表,结构如下:

+----+----------+------------------------+-----------+
| 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     |
+----+----------+------------------------+-----------+
用户:

+----+----------+------------------------+
| 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                  |
+----+----------+------------------------+
| 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
字段是
inviter
属性下
requests
表中存储的相应
id
的用户名

我写了这个查询

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

有人能帮我写一个查询来获得想要的数据吗?

你必须再次加入
用户
请求
用户
,才能获得
邀请者的姓名

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
请参阅。
结果:


您需要再次加入表
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

您需要对user表使用两次left join来获得这个结果,请参阅下面的db fiddle和query

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
DB FIDDLE链接: