您好,有人可以告诉我这是什么最好的方法吗?我的意思是,与之相比,让我先显示查询内容的代码行更少的其他方法
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个表,即带有where子句的表2和3
答案 0 :(得分:1)
要获取有关代理的所有信息,然后左键连接以从另一个表中获取计数,通常需要按所有非聚合字段进行分组...如果您的代理表具有一堆字段,则您最好预先汇总您的子查询,以仅基于每个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和路径名进行内部联接。
答案 1 :(得分:0)
删除表关键字,并在条件中添加AND。
select agent.id, count(que.id) queue_count
from agent
left join (select * from table2 q
INNER JOIN table3 p on q.path_id=p.id
where q.status=1 AND 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