2011-01-03 16 views
8

Czy jest jakiś sposób to zrobić?MySql wybierz wewnątrz innego wybierz?

SELECT sum(price) from table2 WHERE id=(SELECT theid FROM table1 WHERE user_id="myid") 

Mam tabelę 1 z identyfikatorami przedmiotów, które użytkownik kupił. Chcę obliczyć sumę wszystkich przedmiotów zakupionych przez użytkownika.

Czy zapytanie jest zgodne z prawem? Jeśli nie, jaka jest właściwa forma?

Odpowiedz

17

Zmień where id=(SELECT do where id IN (SELECT

Albo, co naprawdę chcesz to prawdopodobnie:

SELECT sum(price) FROM table2 INNER JOIN table1 ON table2.id = table1.theid WHERE table1.user_id = 'my_id' 
1

JOIN byłoby bardziej czytelne:

SELECT SUM(price) FROM table2 
INNER JOIN table1 ON table2.id = table1.theid 
WHERE table1.user_id = "myid" 
+0

i pozwoli na szerokie optymalizacje. –

2

Można również użyć składni JOIN

SELECT sum(price) from table2 t2 
join table1 t1 on t1.theID = t2.id 
WHERE t1.user_id="myid" 

Powinien dać taki sam wynik:

+0

Dobra odpowiedź "Phil" LOL – Sparky

+1

Wielkie umysły myślą podobnie: D –

1

Należy użyć SQL JOIN, aby zapewnić tę funkcjonalność.

SELECT SUM(table2.price) JOIN table1 ON 
table2.id=table1.theid WHERE table1.user_id="myid" 
7

kwerendy jest ok, dopóki subselect wraca tylko jeden wiersz za każdym razem.

jeśli istnieje więcej wiersze zwrócone, będziesz musiał zmienić zapytanie do:

[...] WHERE id IN (SELECT [...] 

UWAGA: w was wypadku proste sprzężenie wewnętrzne jak inni sugerują, byłoby znacznie więcej redable (i może odrobinę szybciej) - ale to, co napisałeś jest absolutnie w porządku (zawsze jest wiele sposobów na uzyskanie pożądanego rezultatu - i teraz zawsze łatwo jest powiedzieć, który z nich jest "najlepszy" ;-))