Как подготовить запрос HAVING? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть следующий запрос:

select ctc.sentencia ,count(lg.id_libro) as cantidad
from cat_tipo_sentencia as ctc
left join libro_gobierno as lg on lg.cod_tiposentencia = ctc.id_sentencia
left join expedientes as e on e.id_expedientes = lg.cod_expediente
GROUP BY ctc.sentencia

Я хочу подсчитать записи, которые находятся в "libro_gobierno" в "cat_tipo_sentencia", но при условии, что он не показывает мне те, которые имеют 0 записей, и когда убрав условие, если оно показывает их, как можно сделать так, чтобы результаты возвращали результаты, не имеющие записей?

- это условный запрос

select ctc.sentencia ,count(lg.id_libro) as cantidad
from cat_tipo_sentencia as ctc
left join libro_gobierno as lg on lg.cod_tiposentencia = ctc.id_sentencia
left join expedientes as e on e.id_expedientes = lg.cod_expediente
where e.cod_distrito= 130 
and e.cod_estado_pro=13
and ctc.id_sentencia in (1,8,10)
GROUP BY ctc.sentencia

и при попытке использовать "HAVING" Я получаю сообщение об ошибке, поскольку условия не входят в группу

. Это данные, которые меня выбрасывают

sentencia1     1

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

sentencia1     1
sentencia2     0
sentencia3     0

PD: Извините за Engli sh, я использую переводчик: (

1 Ответ

0 голосов
/ 05 марта 2020

В LEFT OUTER JOIN, если вы отфильтруете внешнюю таблицу в предложении WHERE, результаты станут такими же, как если бы вы сделали соединение INNER. Строки из главной таблицы, которые не совпадают в объединенной таблице, отфильтровываются.

Этого можно избежать, отфильтровав в предложении ON вашего объединения вместо в предложении WHERE .

SELECT 
   ctc.sentencia
    ,count(lg.id_libro) AS cantidad
FROM 
  cat_tipo_sentencia AS ctc
LEFT JOIN 
  libro_gobierno AS lg 
    ON lg.cod_tiposentencia = ctc.id_sentencia
LEFT JOIN 
  expedientes AS e 
    ON e.id_expedientes = lg.cod_expediente
    AND e.cod_distrito = 130
      AND e.cod_estado_pro = 13
WHERE 
  ctc.id_sentencia IN (1,8,10)
GROUP BY 
  ctc.sentencia

Я пытался использовать общие слова. Я надеюсь, что это переводится хорошо для вас!

...