Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

No entiendo esta consulta SQL

Estas en el tema de No entiendo esta consulta SQL en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 19/12/2007, 14:12
 
Fecha de Ingreso: febrero-2003
Mensajes: 167
Antigüedad: 21 años, 2 meses
Puntos: 1
Exclamación 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!!
  #2 (permalink)  
Antiguo 20/12/2007, 00:52
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
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
  #3 (permalink)  
Antiguo 20/12/2007, 10:44
 
Fecha de Ingreso: febrero-2003
Mensajes: 167
Antigüedad: 21 años, 2 meses
Puntos: 1
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!
  #4 (permalink)  
Antiguo 20/12/2007, 11:09
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
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
  #5 (permalink)  
Antiguo 20/12/2007, 12:24
 
Fecha de Ingreso: febrero-2003
Mensajes: 167
Antigüedad: 21 años, 2 meses
Puntos: 1
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
  #6 (permalink)  
Antiguo 20/12/2007, 13:09
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
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
  #7 (permalink)  
Antiguo 20/12/2007, 13:16
 
Fecha de Ingreso: febrero-2003
Mensajes: 167
Antigüedad: 21 años, 2 meses
Puntos: 1
Re: No entiendo esta consulta SQL

Ahora si gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:57.