2017-02-07 1 views
0

Принимая таблицу клиентов в качестве примера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

Как правило, вы бы обрабатывать логику недостающих результатов (для которых мы знаем, что платеж 0) в коде приложения, например, простой цикл PHP. – Strawberry

+0

См. Это: http://stackoverflow.com/documentation/sql/261/join#t=201701310703048805128 –

ответ

-1

Это на самом деле наоборот присоединиться:

Select * from payments p 
    left join customers c 
     on p.customer_id = c.id 
Смежные вопросы