![]() |
No entiendo esta consulta SQL Soy nuevo en esto y no comprendo la solucion del ejercicio siguiente: Obtener una lista con el nombre y precio de los articulos mas caros de cada fabricante. Tengo 2 tablas: Articulos y fabricantes En fabricantes tengo 2 campos: Codigo y Nombre En Articulos: codigo, nombre precio, fabricantes SELECT A.Nombre, A.Precio, F.Nombre FROM Articulos A, Fabricantes F WHERE A.Fabricante=F.Codigo AND A.Precio= ( SELECT MAX(A.Precio) FROM ARTICULOS A WHERE A.Fabricante=F.Codigo ) No entiendo bien la logica del Select dentro de la condicion. Supuestamnte el SELECT MAX... me devuelve un solo valor? El precio maximo? No entiendo por qué esta consulta tendria que devolver tantos registros como fabricantes tengo. Alguien me podria explicar esta consulta? Gracias!!:arriba: |
Re: No entiendo esta consulta SQL hola siddhartha, pues de lo que se trata es de listar el articulo mas caro de cada fabricante, si tienes 10 fabricantes debemos obtener un listado de 10 articulos, cada uno el mas caro de cada fabricante, entonces en la subconsulta del precio obtenemos el articulo mas costoso de cada fabricante, y ese dato nos sirve para filtrar de la tabla articulos, tanto los datos del articulo como del fabricante, espero haberme explicado |
Re: No entiendo esta consulta SQL Gracias ingcaresc, en realidad lo que no entiendo es lo siguiente: Si yo realizo la subconsulta por separado me da un solo valor supongamos 45, entonces yo interpreto (y este es mi error) lo siguiente: La consulta completa es equivalente a la misma consulta pero reemplazando la subconsulta por 45. es decir: SELECT A.Nombre, A.Precio, F.Nombre FROM Articulos A, Fabricantes F WHERE A.Fabricante=F.Codigo AND A.Precio=45 Pero esta consulta, solo me devuelve el registro correspondiente al articulo de mayor precio. Por esto es que no entiendo cómo la consulta completa me devuelve los articulos de mayor precio de cada fabricante, en vez de solo el articulo mas caro de todos. Esa es mi duda! |
Re: No entiendo esta consulta SQL ok, asi es como funciona, pero en el primer where le estamos diciendo de que fabricante quer emos que tome el articulo mas caro, si te das cuenta: SELECT A.Nombre, A.Precio, F.Nombre FROM Articulos A, Fabricantes F WHERE A.Fabricante=F.Codigo <----aqui estamos filtrando el fabricante AND A.Precio= ( SELECT MAX(A.Precio) FROM ARTICULOS A WHERE A.Fabricante=F.Codigo <--- entonces aqui busca el fabricante que le indicamos arriba ) toma en cuenta que al llegar a ala subconsulta ya hay datos para filtrar respecto al fabricante, si ejecutas la subconsulta por aparte veras que te marca error en el campo F.codigo, porque no hay referencia de esta tabla dentro del parentesis, pero cuando ejecuta todo esa referencia se toma del primer select. Espero haber resuelto tu duda |
Re: No entiendo esta consulta SQL claro, lo que pasa que donde vos decis:"<----aqui estamos filtrando el fabricante", para mi ahí no hay filtro es la condicion para unir las dos tablas ¿me entendes? Se que yo estoy equivocado, pero no termino de entender |
Re: No entiendo esta consulta SQL SELECT A.Nombre, A.Precio, F.Nombre FROM Articulos A, Fabricantes F WHERE A.Fabricante=F.Codigo <---- Aqui haces el join de las tablas AND A.Precio= ( SELECT MAX(A.Precio) FROM ARTICULOS A WHERE A.Fabricante=F.Codigo <--- * ) <-- * Aqui si te fijas "F" hace referencia a la consulta principal, y por tanto este valor cambia para cada fabricante, de ahi que saque un resultado por fabricante. mejor? Un saludo |
Re: No entiendo esta consulta SQL Ahora si gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| La zona horaria es GMT -6. Ahora son las 22:44. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.