大家好,谁能告诉我这是什么最好的方式,我的意思是任何其他方式,与此相比,代码行更少,让我先显示查询
select agent.*, count(que.id) queue_count
from table agent
left join (select * from table2 q
INNER JOIN table3 p on q.path_id=p.id
where q.status=1 p.name='demo') que
on que.agent_id=agent.id
left join table3 path on path.id=que.path_id
group by agent.id
order by queue_count
我现在有 3 个表我想再次加入所有表和内部选择我加入 2 个表,即表 2 和 3 与 where 子句
要获取有关代理的所有信息,然后左加入以从另一个表中获取计数,您通常需要按所有非聚合字段进行分组...如果您的代理表有一堆字段,您会更好预先聚合您的子查询以获取基于 per-agentId 的计数...然后您最多有每个代理的一条记录,并且可以在该代理上进行简单的 LEFT-JOIN。
我假设您对“table”、“table2”、“table3”的表引用实际上是实际表的假名,但在查询中分别使用了“agent”、“p”和“q”的别名。
select
agent.*,
que.AgentQueueCount queue_count
from
table agent
left join
(select
q.agent_id,
count(*) AgentQueueCount
from
table2 q
INNER JOIN table3 p
on q.path_id = p.id
AND p.name='demo'
where
q.status = 1
group by
q.agent_id ) que
on agent.id = que.agent_id
order by
que.AgentQueueCount
在这里,子查询已经在匹配的路径 ID 和路径名上进行了内部连接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句