Я хочу отобразить имя клиники и общий доход в моей базе данных с условием даты в течение года и месяца.
Вот что я получил:
SELECT tbl_clinics.clinic_name, COALESCE(SUM(tbl_bill.bill_amt),0) AS clinic_tot FROM tbl_clinics
LEFT OUTER JOIN tbl_check_up ON tbl_clinics.clinic_id = tbl_check_up.clinic_id
LEFT OUTER JOIN tbl_bill ON tbl_check_up.bill_id = tbl_bill.bill_id
WHERE MONTH(tbl_bill.date_billed) = "01"
AND YEAR(tbl_bill.date_billed) = "2018"
AND tbl_clinics.user_id = "2-2017"
GROUP BY tbl_clinics.clinic_name
теперь мой запрос возвращается только правильно, если у меня есть данные, которые были извлечены из моей базы данных. Теперь я хочу что-то вроде этого: например, я меняю дату YEAR(tbl_bill.date_billed) = "2019"
тогда я хочу вывести вот так:
_________________________________
| Clinic_name | clinic_tot |
---------------------------------
| Clinic 1 | 0 |
---------------------------------
Предложение WHERE
превращает внешнее соединение во внутреннее соединение. Вам нужно переместить условия на всех, кроме первой таблицы, в предложение ON
:
SELECT c.clinic_name, COALESCE(SUM(b.bill_amt), 0) AS clinic_tot
FROM tbl_clinics c LEFT OUTER JOIN
tbl_check_up cu
ON c.clinic_id = cu.clinic_id LEFT OUTER JOIN
tbl_bill b
ON cu.bill_id = b.bill_id AND
MONTH(b.date_billed) = 1 AND
YEAR(b.date_billed) = 2018
WHERE c.user_id = '2-2017'
GROUP BY c.clinic_name