在不同的密钥上连接两次相同的表

Gar*_*eld 2 mysql sql join

我有两个表accountssubs.
第一台具有id与第二表有田id,requester_account_id,grabber_account_id

我想要计算帐户制作了多少个子请求,以及他做了多少抓取(基于是否requester_account_id/grabber_account_id填充了他的id)

在一个查询中

输出:

+------------+----------------+-----------------+
| account_id | subs_requested | subs_grabbed    |
+------------+----------------+-----------------+
|  1         | 4              | 3               |
|  3         | 2              | 1               |
+------------+----------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

TMS*_*TMS 5

使用类似的东西

select accounts.id, 
    count(distinct s1.id) as num_req, 
    count(distinct s2.id) as num_grab
from accounts left join subs as s1 on accounts.id = s1.requester_account_id
    left join subs as s2 accounts.id = s2.grabber_account_id
group by accounts.id
Run Code Online (Sandbox Code Playgroud)

诀窍是使用表subs两次:subs as s1并且subs as s2,每次加入不同的字段....

关于效率的注意事项:我不确定,但我相信这个解决方案比子查询解决方案更快,但没有经过测试(至少它不会慢).我总是喜欢left join可能的子查询.