mysql объединяет отношения один-ко-многим, многие-к-одному без избыточных данных - PullRequest
0 голосов
/ 30 сентября 2018

Я просто погуглил, но не смог найти идеального ответа на свой вопрос.Я пытаюсь объединить заказы с тремя таблицами payment_milestone, счета-фактуры. Соотношение между таблицами выглядит следующим образом:

заказов на payment_milestone (один ко многим) в одном заказе может быть много payment_milestone, связанных с ним, может быть 25%, 50%и 25% в разные даты.

теперь по истечении времени payment_milestone будет сгенерирован счет-фактура, а в таблице счетов-фактур появятся order_id и payment_milestone_id

, поэтому, когда я присоединился к ним вот так:

SELECT 
inv.invoice_id, ord.sub_total, ord.vat_added, pm.pay_date, pm.percentage
FROM orders ord
INNER JOIN
payment_milestone pm ON ord.order_id = pm.order_id 
INNER JOIN 
invoices inv ON ord.order_id = inv.order_id

он вернул мне: этот результат , который является избыточным

Я использовал предложение GROUP BY, и он дал такой результат: результат

результат, который я хочу получить, таков:

invoice_id      sub_total        vat_added        pay_date       percentage
----------------------------------------------------------------------------
11              40000.00         2000.00          2018-09-20     53
12              40000.00         2000.00          2018-09-22     47
13              45360.00         2268.00          2018-09-27     100

Я не могу понять, где я делаю неправильно в запросе.

заранее спасибо!

1 Ответ

0 голосов
/ 30 сентября 2018

В случае объединения между payment_milestone и таблицей счетов, объединение должно быть на payment_milestone_id, а не order_id.Как я понимаю из вашего ограниченного постановления проблемы, для каждого payment_milestone_id генерируется invoice_id.

Вместо этого попробуйте следующее:

SELECT 
  inv.invoice_id, 
  ord.sub_total, 
  ord.vat_added, 
  pm.pay_date, 
  pm.percentage
FROM orders AS ord
INNER JOIN
  payment_milestone AS pm ON ord.order_id = pm.order_id 
INNER JOIN 
  invoices AS inv ON pm.payment_milestone_id = inv.payment_milestone_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...