Я пытаюсь объединить таблицы, где пользовательская запись не существует в одной из таблиц - PullRequest
0 голосов
/ 12 февраля 2020

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

Третья используемая таблица - это наша таблица записей о пользователях для получения записи о пользователях.

Есть ли способ не обрабатывать запись в таблице покупок как баланс «0»?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Что-то вроде этого должно работать:

CASE WHEN (SELECT COUNT(*) FROM purchases WHERE purchase_user_id = user_id) > 0
     THEN balance_value
     ELSE 0
 END as balance

РЕДАКТИРОВАТЬ: исходя из запроса, который вы добавили, я думаю, вы можете просто COALESCE сумму до 0, прежде чем делать SUM(). Это должно предотвратить возврат значения NULL, если в таблице покупок нет записей.

SELECT ce.platform_id,
       SUM(COALESCE(p.amount, 0))
FROM current_eligibility ce
LEFT JOIN purchases p ON p.platformId = ce.platform_id
WHERE p.currency = 'X123' AND
      ce.platform_id = 'X2334'
GROUP BY ce.platform_id
0 голосов
/ 12 февраля 2020

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

Без объединения вы не сможете отображать записи как 0, но вы не сможете создать соединение ни к чему, поэтому я предлагаю вам добавить запись для каждого пользователя (при создании учетной записи пользователя) в покупает планшет с балансом 0.

Надеюсь, это поможет

...