Выберите значение для каждого пользователя, даже если нет никакого sql - PullRequest
0 голосов
/ 07 ноября 2018

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

---------------------
| user_id | balance |
---------------------
| 1       | 0.0     |
---------------------

Но когда я делаю запрос, где нет транзакций:

SELECT u.id AS user_id, SUM(amount) AS balance FROM `transactions` t
INNER JOIN users u
ON t.from_id = u.id
WHERE card_type = 'debit'

Возвращает:

---------------------
| user_id | balance |
---------------------
| null    | null    |
---------------------

Следовательно, как мне получить первый результат без транзакций в таблице, если это возможно?

1 Ответ

0 голосов
/ 07 ноября 2018

Вы ищете внешнее соединение - и group by:

SELECT u.id AS user_id, COALESCE(SUM(t.amount), 0) AS balance
FROM users u LEFT JOIN
    transactions t
    ON t.from_id = u.id AND
       t.card_type = 'debit'
GROUP BY u.id;

Примечания:

  • Вам нужны все пользователи, поэтому это первая таблица в LEFT JOIN.
  • Вы хотите ровно одну строку на пользователя, поэтому вы хотите GROUP BY u.id.
  • Вы фильтруете таблицу second , поэтому фильтр входит в предложение ON.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...