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