SQL Объединение таблиц и отображение значения по умолчанию для несопоставленных записей в правой таблице

У меня есть 2 таблицы, которые я хочу, чтобы они были объединены при выполнении определенного условия.

1) Таблица клиентов

Таблица клиентов

2) Таблица платежей

Таблица платежей

С помощью этих таблиц я хочу увидеть, сколько уже заплатил каждый клиент. Если клиент еще не совершал платежей, столбец amount должен иметь значение 0

У меня был этот SQL-запрос, но он не показывает клиентов без платежей.

SELECT c.id, c.name, co.amount FROM clients c LEFT OUTER JOIN collectibles co ON c.id = co.client_id WHERE co.removed = 0

Результат этого запроса покажет только 1 запись, и это клиент Cliff с оплатой 25000

Как я смогу достичь ожидаемого результата?


person Steven    schedule 12.08.2019    source источник


Ответы (2)


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

  SELECT c.id
    , c.name
    , ifnull(co.amount ,0)
FROM clients c 
LEFT OUTER JOIN collectibles co ON c.id = co.client_id 
          AND co.removed = 0
person scaisEdge    schedule 12.08.2019

Предложение WHERE превращает внешнее соединение во внутреннее. Я думаю, вы хотите:

SELECT c.id, c.name, COALESCE(co.amount, 0) as amount
FROM clients c LEFT OUTER JOIN
     collectibles co
     ON c.id = co.client_id AND co.removed = 0;

Вам нужно COALESCE(), чтобы вернуть 0 вместо NULL.

person Gordon Linoff    schedule 12.08.2019