Запрос с несколькими условиями И

#mysql

#mysql

Вопрос:

У меня есть свой запрос, как показано ниже

 SELECT dates,  COUNT(link_data_id) as TotalClicks,  sum(case when link_redirect_status = 1 then 1 else 0 end) AS GoodClicks,   sum(case when link_redirect_status != 1 then 1 else 0 end) AS BadClicks  FROM tbl_calendar  LEFT JOIN tbl_links_data ON dates = CAST(link_data_time AS DATE)  WHERE (`dates` BETWEEN '2021-11-28' AND DATE_ADD('2021-11-28', INTERVAL 7 DAY))  GROUP BY dates  

Это дает мне ожидаемый результат, как показано ниже

введите описание изображения здесь

Но я хочу добавить еще одно условие под названием link_order_id =’abcde’, поэтому я пытаюсь, как показано ниже

 SELECT dates,  COUNT(link_data_id) as TotalClicks,  sum(case when link_redirect_status = 1 then 1 else 0 end) AS GoodClicks,   sum(case when link_redirect_status != 1 then 1 else 0 end) AS BadClicks  FROM tbl_calendar  LEFT JOIN tbl_links_data ON dates = CAST(link_data_time AS DATE)  WHERE link_order_id = 'abcde'   AND (`dates` BETWEEN '2021-11-28' AND DATE_ADD('2021-11-28', INTERVAL 7 DAY))  GROUP BY dates  

Но это дает мне только две строки, как показано ниже

введите описание изображения здесь

Почему я получаю только две строки вместо 8 строк, как на первой картинке?

Комментарии:

1. Похоже link_order_id , это столбец из tbl_links_data таблицы. Если это так, то вы должны переместить условие по нему из предложения WHERE в предложение ON (в КОТОРОМ оно преобразует ЛЕВОЕ соединение во ВНУТРЕННЕЕ).

Ответ №1:

Переместите критерии в WHERE предложении в ON предложение объединения:

 SELECT  c.dates,  COUNT(d.link_data_id) AS TotalClicks,  SUM(CASE WHEN d.link_redirect_status = 1 THEN 1 ELSE 0 END) AS GoodClicks,   SUM(CASE WHEN d.link_redirect_status != 1 THEN 1 ELSE 0 END) AS BadClicks  FROM tbl_calendar c LEFT JOIN tbl_links_data d  ON c.dates = CAST(d.link_data_time AS DATE) AND  d.link_order_id = 'abcde'  WHERE (c.dates BETWEEN '2021-11-28' AND DATE_ADD('2021-11-28', INTERVAL 7 DAY))  GROUP BY c.dates;