我有两个名为users
和requests
的表,其结构如下:
用户:
+----+----------+------------------------+
| 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 |
+----+--------+-----------------+--------+---------+
有人可以帮助我编写查询以获取所需数据吗?
答案 0 :(得分:1)
您必须再次将users
分别加入requests
和users
才能获得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