Как правильно составить SQL запрос?

Всем привет. Накидал пример для наглядности.
Я постарался подробно нарисовать на картинке что я хочу получить. Но проблема в том что значения при выводе из 3-х таблиц дублируются. И получается неправильная сумма! Вот пример + SQL запрос.
0c80346d57.jpg
SELECT Order.Id, Order.Customer, SUM(Order_position.Weight), SUM(Order_other.Price * Order_other.Value)
FROM Order LEFT JOIN Order_position ON Order.Id = Order_position.Order_id 
LEFT JOIN Order_other ON Order.Id = Order_other.Order_id WHERE Order.Id = 1
  • Вопрос задан
  • 573 просмотра
Решения вопроса 2
k1lex
@k1lex
Программист торг. сети. C# (WPF, WinForms), T-SQL
У вас немного неправильная логика построения запроса. Сначала сгруппируйте таблицы Order_position и Order_other по GROUP BY Order_id. А потом соединяйте их с заказом.
Добавил код:
SELECT O.ID
	,O.Customer
	,x.Summ
	,y.summ
FROM ORDER O
LEFT JOIN (
	SELECT order_id
		,SUM(Price * Value) AS summ
	FROM Order_other
	GROUP BY order_id
	) x ON O.Id = x.Order_id
LEFT JOIN (
	SELECT order_id
		,SUM(Weight) AS summ
	FROM Order_position
	GROUP BY order_id
	) y ON O.Id = y.Order_id
Ответ написан
@bizon2000
Java-программист
SELECT Id, Customer,
       (SELECT SUM(op.Weight) FROM Order_position op WHERE op.Order_id = o.Id),
       (SELECT SUM(oo.Price * oo.Value) FROM Order_other oo WHERE oo.Order_id = o.Id)
    FROM Order o
    WHERE Id = 1
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@nozzy
Symfony, Laravel, SQL
select
t3.id,
t3.Customer,
t3.weight,
t4.others
from
(
  select
  t1.id,
  t1.Customer,
  t2.weight
  from Order t1
  inner join 
  (
    select
    Order_id,
    sum(Weight) as weight
    from Order_position
    group by Order_id
  ) t2 on t2.Order_id = t1.id
) t3 
  inner join
  (
    select
    Order_id,
    sum(Price * Value) as others
    from Order_other
    group by Order_id
  ) t4 on t4.Order_id = t3.id
Ответ написан
Комментировать
@kirill-93
Добавьте GROUP BY Order.id в конец запроса
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы