Условное INNER JOIN или LEFT JOIN в зависимости от условия соединения - PullRequest
0 голосов
/ 31 января 2019

У меня есть запрос

SELECT
  users.email AS email,
  addons.sku AS sku,
  addons.quantity as quantity,
 invoices.total as total

FROM addons

INNER JOIN users ON 1=1
  and users.id = addons.user_id

LEFT JOIN invoices ON 1=1
  AND invoices.user_id = users.id
  AND invoices.status != 3

Вот что мне нужно сделать:

  • , если у пользователя нет счета-фактуры вообще, мы должны включить его в NULL будучи возвращенным в total
  • , если у пользователя есть счет в статусе != 3, мы должны включить его
  • , если счета существуют и статус = 3, мы должны исключить их.

То есть мне нужно одновременно и INNER JOIN, и LEFT JOIN

Как мне этого добиться?

1 Ответ

0 голосов
/ 31 января 2019

Это то, что вам нужно:

SELECT
  users.email AS email,
  addons.sku AS sku,
  addons.quantity as quantity,
  invoices.total as total
FROM addons
INNER JOIN users
  ON users.id = addons.user_id
LEFT JOIN invoices 
  ON invoices.user_id = users.id
WHERE invoices.status IS NULL OR invoices.status != 3

Объяснение:

  • Пользователи без счетов включены в результат с «пустой» суммой счета.Вот что означает LEFT JOIN для
  • Пользователи со статусом счета! = 3 включены, как и их счета.Итак, добавьте это к предложению where (помните, что status может быть NULL из-за вышеупомянутого LEFT JOIN)
  • Пользователи со статусом счета = 3 исключаются.Сделайте это с WHERE предложением
...