вложенное внутреннее соединение с запросом выбора в MySQL - PullRequest
0 голосов
/ 17 января 2019

Здравствуйте, кто-нибудь может мне сказать, что это лучший способ, я имею в виду любой другой способ, который будет иметь меньше строки кода по сравнению с этим, позвольте мне сначала показать запрос

 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

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Чтобы получить всю информацию об агенте, а затем присоединиться к нему, чтобы получить счетчики из другой таблицы, вам, как правило, нужно сделать группу по всем неагрегированным полям ... Если в вашей таблице агентов есть несколько полей, вы было бы лучше предварительно агрегировать ваш подзапрос, чтобы просто получить подсчеты для каждого агента-агента ... Тогда у вас есть НАИБОЛЕЕ одна запись на агента и вы можете просто выполнить 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

Здесь подзапрос уже внутренне присоединен к соответствующему идентификатору пути и имени пути.

0 голосов
/ 17 января 2019

Удалить ключевое слово таблицы и добавить И в условии.

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...