2011-01-03 18 views
8

Gibt es eine Möglichkeit, dies zu tun?MySql innerhalb eines anderen auswählen?

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

Ich habe Tabelle1 mit IDs, die ein Benutzer gekauft hat. Ich möchte die Summe aller vom Benutzer gekauften Artikel berechnen.

Ist die obige Abfrage zulässig? Wenn nicht, wie lautet die richtige Form?

Antwort

17

ändern where id=(SELECT-where id IN (SELECT

Oder was Sie wirklich wollen, ist wahrscheinlich:

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

A JOIN besser lesbar sein würde:

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

und würde große Optimierungen ermöglichen –

2

Sie auch die JOIN-Syntax verwenden können

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

Sollten Sie dasselbe Ergebnis erhalten

+0

Gute Antwort "Phil" LOL – Sparky

+1

Großartige Köpfe denken gleich: D –

1

Sie sollten SQL JOIN verwenden, um diese Funktionalität bereitzustellen.

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

Sie abfragen, ist in Ordnung, solange die subselect ist nur eine Zeile jedes Mal zurück.

wenn es mehr Zeilen zurückgegeben, werden Sie Ihre Anfrage ändern müssen:

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

HINWEIS: in Ihnen Fall eine einfache innere Verknüpfung wie andere vorgeschlagen wäre viel mehr redable (und vielleicht ein kleines bisschen schneller) - aber was du geschrieben hast, ist absolut ok (es gibt immer mehrere Möglichkeiten, das gewünschte Ergebnis zu erzielen - und es ist jetzt immer einfach zu sagen, wer der "Beste" ist ;-))

Verwandte Themen