Как заменить подзапрос в качестве запроса соединения - PullRequest
0 голосов
/ 14 мая 2019

Я использую этот запрос

select t.task_id,td.task_detail_id ,
(SELECT COUNT(1) FROM task_detail tdd where tdd.task_id=t.task_id and  
tdd.status='ACTIVE' ) as total
from task t inner join task_detail td  on td.task_id=t.task_id 
where td.task_id=t.task_id and td.status='ACTIVE' ; 

Запрос выполняется с ожидаемыми результатами, но я хочу изменить total column подзапрос как объединение.

Here is output

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

В MySQL 8+ вы бы использовали оконные функции

select t.task_id, td.task_detail_id,
       count(*) over (partition by t.task_id) as total
from task t inner join
     task_detail td
     on td.task_id = t.task_id 
where td.status = 'ACTIVE' ; 

В более ранних версиях рекомендуется использовать подзапрос, но вы можете переместить его в предложение from:

select t.task_id, td.task_detail_id,
       td2.total
from task t inner join
     task_detail td
     on td.task_id = t.task_id join
     (select count(*) as total
      from task_detail td2
      where td2.status = 'ACTIVE'
      group by td2.task_id
     ) td2
     on td2.task_id = td.task_id
where td.status = 'ACTIVE' ; 
0 голосов
/ 14 мая 2019

Можете ли вы попробовать это-

SELECT 
t.task_id, 
td.task_detail_id, 
COUNT(*)
FROM task t
INNER JOIN task_detail td 
    ON td.task_id = t.task_id AND td.STATUS = 'ACTIVE'
GROUP BY t.task_id, td.task_detail_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...