Как объединить 3 таблицы и выполнить объединение в подзапросе? - PullRequest
1 голос
/ 13 июня 2019

Есть четыре стола Bill_entry , Клиент , Чит , Наличные .Я хочу объединить таблицу Customer с таблицей Bill_entry в следующем запросе, где у них есть общий столбец customer_id.Цель здесь - использовать customer_id Я хочу напечатать customer_name тоже в одном запросе.

Я пытался, но не смог получить правильный синтаксис

Исходный код перед включением таблицы клиентов:

SELECT Bill_entry.*
FROM (SELECT * FROM Chit UNION SELECT * FROM Cash) as t1 RIGHT JOIN 
     entry
     ON (Bill_entry.bill_no = t1.bill_no)
WHERE t1.bill_no IS NULL

МОИ попытки:

SELECT Bill_entry.*, Customer.customer_name
FROM ((SELECT * FROM Chit UNION SELECT * FROM Cash) as t1 RIGHT JOIN entry ON (Bill_entry.bill_no = t1.bill_no) WHERE t1.bill_no IS NULL)customer where Bill_entry.customer_id = Customer.Customer_id

1 Ответ

1 голос
/ 13 июня 2019

Просто добавьте еще JOIN:

SELECT e.*, cu.customer_name
FROM bill_entry e LEFT JOIN
     (SELECT * FROM Chit
      UNION ALL  -- assume you don't want to remove duplicates
      SELECT * FROM Cash
     ) c 
     entry e
     ON e.bill_no = c.bill_no LEFT JOIN
     Customer cu
     ON cu.customer_id = e.Customer_id
WHERE c.bill_no IS NULL;

Обратите внимание на некоторые изменения.

  • UNION -> UNION ALL. Я предполагаю, что вы не хотите удалять дубликаты или нести накладные расходы за их удаление.
  • RIGHT JOIN -> LEFT JOIN. Обычно гораздо проще думать о LEFT JOIN с - сохранить все строки в первой таблице, а затем сопоставить строки в других.
  • Все условия JOIN содержатся в предложениях ON, а не в предложении WHERE.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...