2012-09-23 10 views
8

Mam dwie tabele: ITEMS z ilości i unit_price (ID | Nazwa | order_id | qt | unit_price) i stół ORDERS.MySQL UPDATE z SELECT SUM z innej tabeli

Chcę, aby UPDATE stół orders i miejsce w orders.total_price sum of multiplications qt*unit_price dla tych samych zamówień, aby uzyskać całkowitą cenę zamówienia.

SELECT zapytanie na tabeli elementów jest dość prosty i działa drobne sumy charytatywne dla wszystkich elementów w tym samym ORDER_ID:

SELECT SUM(items.qt*items.unit_price) from items GROUP by items.order_id 

ale nie mogę wstawić tę wartość w moim ORDERS tabeli. Nie mogłam dokonać tej pracy:

UPDATE orders, items SET orders.total_price = (SELECT SUM(items.qt*items.unit_price) 
FROM items GROUP BY items.order_id) WHERE orders.id = items.order_id 

powraca "Subquery returns more than 1 row"

znalazłem bardzo podobne pytanie here ale odpowiedź nie działa dla mnie, a także:

UPDATE orders SET orders.t_price = (SELECT SUM(items.qt*items.unit_price) from items WHERE orders.id = items.order_id) 
+0

proszę pokazać swoje pełne zapytanie co robisz jak mysql_query ("zapytanie") –

+1

Robię to na razie w phpmyadmin, więc drugie zapytanie powyżej to rzeczywiste zapytanie, które próbuję: "ZAKTUALIZUJ zamówienia, elementy SET orders.total_price = (SELECT SUM (items.qt * items.unit_price) Z pozycji GROUP BY items.order_id) WHERE orders.id = items.order_id " – Milosz

Odpowiedz

13

Ty możliwe, UPDATE z JOIN z dwoma tabelami:

UPDATE Orders o 
INNER JOIN 
(
    SELECT order_id, SUM(qt * unit_price) 'sumu' 
    FROM items 
    GROUP BY order_id 
) i ON o.id = i.order_id 
SET o.total_price = i.sumu 
[WHERE predicate] 
+0

Dziękuję. Co powinien powiedzieć [GDZIE predykat]? Bez tego wpływa na 0 wierszy, a "WHERE o.id = i.order_id" wpływa również na 0 wierszy. – Milosz

+0

@ user1692064 można użyć klauzuli "WHERE" do dostarczenia dodatkowego warunku, aby zaktualizować podaną kolumnę tylko wtedy, gdy ten warunek był prawdziwy, należy zauważyć, że ta klauzula jest opcjonalna i zapisz ją, jeśli jej potrzebujesz. Wystąpiły również 0 wierszy, ponieważ nie może być żadnych pól spełnia warunek łączenia, który jest "ON o.id = i.order_id' –

+0

Przykro mi, to był mój brak wiedzy, że mysql w phpmyadmin ignoruje w" dotkniętych wartościach "te rekordy które już mają tę samą wartość. Musiałem mieć prawidłowe wartości we wszystkich rekordach, grając z kilkoma różnymi zapytaniami. Dziękuję Ci. – Milosz

Powiązane problemy