回答

收藏

用不同的键将同一张桌子连接两次

技术问答 技术问答 184 人阅读 | 0 人回复 | 2023-09-12

我有两张桌子accounts和subs。) E7 v2 p3 {1 N! y
第一台具有id与第二表有田id,requester_account_id,grabber_account_id
& H) e. y8 x( o我想要一个账户多少次子请求,他抓取了多少次(基于,如果这个账户requester_account_id/grabber_account_id填满他的id)
  E' b0 b) n% w8 u) a在查询中+ i( Z. k0 k3 L9 g! }2 ?, T# B! p7 @
输出:% K+ x! |8 n- m6 Q8 O- e
    ------------ ---------------- ----------------- | account_id | subs_requested | subs_grabbed    | ------------ ---------------- ----------------- |          |                                                                                                                                                                                                       |  3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ||    3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |                                                             |             | ------------ ---------------- -----------------                 8 v& [# d# M' z! y
    解决方案:                                                               
( w6 b6 P* A% U( n* Z                                                                使用类似: @: T9 {' u9 _) f
select accounts.id,    count(distinct s1.id) as num_req,    count(distinct s2.id) as num_grabfrom accounts left join subs as s1 on accounts.id = s1.requester_account_id    left join subs as s2 accounts.id = s2.grabber_account_idgroup by accounts.id提示是使用表subs两次:subs as s1和subs as s2.每次由不同的字段连接。, W8 t$ q/ T& q4 h" Q
关于效率的注意事项:我不确定,但我相信这个解决方案比查询解决方案快,虽然没有测试(至少不会慢)。leftjoin只要有可能,我总是更喜欢子查询。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则