繁体   English   中英

嵌套内部联接与MySQL中的选择查询

[英]nested inner join with select query in mysql

大家好,有人可以告诉我这是什么最好的方法吗?我的意思是,与之相比,这行代码更少的任何其他方法,让我先显示查询

 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

要获取有关代理的所有信息,然后左键连接以从另一个表中获取计数,通常需要按所有非聚合字段进行分组...如果您的代理表具有一堆字段,那会更好预先汇总您的子查询,以便仅获取基于每个agentId的计数...那么您每个代理至少要有一条记录,并且可以对该代理进行简单的LEFT-JOIN操作。

我假设您对“表”,“表2”,“表3”的表引用实际上是实际表的假名称,但是在查询中分别使用了“代理”,“ 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和路径名称上进行内部联接。

删除表关键字,并在条件中添加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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM