2011-01-03 18 views
8

¿Hay alguna manera de hacer esto?MySql seleccionar dentro de otro seleccionar?

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

Tengo la tabla1 con los ID de los elementos que ha comprado un usuario. Quiero calcular la suma de todos los artículos comprados por el usuario.

¿La búsqueda de arriba es legal? Si no, ¿cuál es la forma correcta?

Respuesta

17

Cambio where id=(SELECT-where id IN (SELECT

O lo que realmente quiere es probablemente:

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

Un JOIN sería más legible:

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

y permitiría grandes optimizaciones –

2

También puede utilizar la sintaxis JOIN

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

Debe darle el mismo resultado

+0

Buena respuesta "Phil" LOL – Sparky

+1

Las grandes mentes piensan igual: D –

1

Debe usar SQL JOIN para proporcionar esa funcionalidad.

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

se consulta es aceptable, siempre y cuando el subselect regresa sólo una fila cada vez.

si hay más filas devueltas, que tendrá que cambiar la consulta a:

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

NOTA: en ti caso, un simple combinación interna como otros sugirieron que sería mucho más redable (y tal vez un poquito más rápido), pero lo que has escrito está absolutamente bien (siempre hay varias maneras de obtener el resultado deseado, y ahora siempre es fácil decir cuál es "el mejor" ;-))