Retroceder   Foros del Web > Programación para sitios web > Bases de Datos

Respuesta
 
Herramientas Desplegado
Antiguo 19-dic-2007, 13:12   #1 (permalink)
Siddhartha está en el buen camino
 
Fecha de Ingreso: febrero-2003
Mensajes: 135
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!!
Siddhartha está desconectado   Responder Citando
Antiguo 19-dic-2007, 23:52   #2 (permalink)
ingcaresc ha deshabilitado el karma
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
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
ingcaresc está desconectado   Responder Citando
Antiguo 20-dic-2007, 09:44   #3 (permalink)
Siddhartha está en el buen camino
 
Fecha de Ingreso: febrero-2003
Mensajes: 135
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!
Siddhartha está desconectado   Responder Citando
Antiguo 20-dic-2007, 10:09   #4 (permalink)
ingcaresc ha deshabilitado el karma
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
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
ingcaresc está desconectado   Responder Citando
Antiguo 20-dic-2007, 11:24   #5 (permalink)
Siddhartha está en el buen camino
 
Fecha de Ingreso: febrero-2003
Mensajes: 135
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
Siddhartha está desconectado   Responder Citando
Antiguo 20-dic-2007, 12:09   #6 (permalink)
seyko ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.006
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
seyko está desconectado   Responder Citando
Antiguo 20-dic-2007, 12:16   #7 (permalink)
Siddhartha está en el buen camino
 
Fecha de Ingreso: febrero-2003
Mensajes: 135
Re: No entiendo esta consulta SQL

Ahora si gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Siddhartha está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 09:15.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93