Принимая таблицу клиентов в качестве примераSQL запросы для консолидации данных из двух таблиц
CREATE TABLE customer (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20));
CREATE TABLE payments (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
customer_id INT(11),
month INT(2),
year INT(4),
amount INT(5),
FOREIGN KEY fk_cust(customer_id)
REFERENCES customer(id));
Таблицы выплат содержит информацию о месяце, год и сумме оплаты заказчика.
У меня возникли проблемы с записью запроса SELECT. Результат должен содержать все месяцы конкретного года для всех клиентов, если клиент не произвел платеж за определенный месяц, столбец оплаты должен быть NULL за этот месяц.
SELECT * FROM customers c
LEFT JOIN payments p ON c.id = p.customer_id AND p.year = 2017
Если я выполняю вышеуказанный запрос, я получаю только строки с месяцами с платежами.
Я заранее извиняюсь за любые ошибки (я новичок в MySQL и StackOverflow).
EDIT: Запрос должен возвращать записи в течение месяцев, когда платежей не существует. Например, Если клиент осуществил платеж только в июне, запрос должен возвращать записи за другие месяцы с нулевым значением в качестве платежей.
Как правило, вы бы обрабатывать логику недостающих результатов (для которых мы знаем, что платеж 0) в коде приложения, например, простой цикл PHP. – Strawberry
См. Это: http://stackoverflow.com/documentation/sql/261/join#t=201701310703048805128 –