como utilizar el inner

Para debatir interrogar o exponer cualquier duda o sugerencia sobre el curso SQL desde cero.

como utilizar el inner

Notapor robert » Mar Feb 25, 2014 10:08 pm

realize la solucion del 1 ejercicio de la leccion 20 pero con el WHERE. Lo que no se es como pongo tantos condicionales en un inner me podria ayudar dejo la solucion con el where probada aunque realize toda la base de datos en php my admin de local host y tambien funciono le agradezco esta muy bueno el manual y uno aprende y la practica es muy facil, aunque lo pone a pensar GRACIAS


SELECT p.id_quiniela, e.id_evento, l.equipo local, v.equipo visitante, p.pronostico
FROM pronosticos p, eventos e, equipos l, equipos v
WHERE p.id_jornada = e.id_jornada
AND e.local = l.id_equipo
AND e.visitante = v.id_equipo
AND p.id_jornada = e.id_jornada
AND p.id_evento = e.id_evento
HAVING p.id_quiniela =4
robert
 
Mensajes: 2
Registrado: Vie Feb 14, 2014 4:54 pm

Re: como utilizar el inner

Notapor Pere » Vie Feb 28, 2014 8:34 pm

Hola Robert,

Lo primero felicitarte por encontrar una de las soluciones del capitulo 20, capitulo en el que no se han publicado las soluciones. Hasta ahora, tras poco más de cuatro años que está la web en marcha eres el único caso que conozco, así que felicidades.

La parte negativa es la clausula HAVING que has incorporado en tu solución, aunque el resultado es correcto, el hecho de haber usado el filtro en la clausula HAVING en lugar de la clausula WHERE denota que no tienes claro el propósito de cada cláusula, por lo que te sugiero que repases la lección 8, concretamente el apartado: "Diferencia entre WHERE y HAVING"

tu solución está mejor construida así:

SELECT p.id_quiniela, e.id_evento, l.equipo local, v.equipo visitante, p.pronostico
FROM pronosticos p, eventos e, equipos l, equipos v
WHERE p.id_jornada = e.id_jornada
AND e.local = l.id_equipo
AND e.visitante = v.id_equipo
AND p.id_jornada = e.id_jornada
AND p.id_evento = e.id_evento
AND p.id_quiniela =4


En cuanto a la construcción de la misma consulta usando INNER JOIN, te pongo el ejemplo que aparece en la lección 15:

Código: Seleccionar todo

  select C
.TITULO CURSO , concat(A.APELLIDOS,', ',A.NOMBRE ) ALUMNO
    from ALUMNOS_CURSOS AC inner join ALUMNOS A
      on AC
.ID_ALUMNO = A.ID_ALUMNO inner join CURSOS C
      on AC
.ID_CURSO  = C.ID_CURSO


Fíjate que en ella aparecen tres tablas y, en la clausula ON se asocian las claves primarias de unas tablas con las foráneas de otras. Intenta hacer lo mismo con las cuatro tablas que aparecen en tu solución. recuerda poner el filtro :

WHERE p.id_quiniela =4

fuera del INNER JOIN, ja que este no tiene el propósito de relacionar tablas sino de filtrar los registros que el INNER relaciona y da como resultado.

saludos y suerte.
Pere
 
Mensajes: 74
Registrado: Mar Feb 02, 2010 9:44 pm

Re: como utilizar el inner

Notapor FABIAN2 » Mié Ago 03, 2016 10:10 pm

Buenas tardes,
yo llegué a la lección 20 y no puedo resolver el punto 1 aún.
lo que implemento es lo siguiente:

Lo primero que hago:
Código: Seleccionar todo
select P.ID_QUINIELA,P.ID_EVENTO, P.PRONOSTICO as PRONOSTICO
from QUINIELAS as Q inner join PRONOSTICOS as P on P.ID_QUINIELA=Q.ID_QUINIELA
where P.ID_QUINIELA=4


Esto me devuelve los 3 resultados correctos de la solución. Ahora necesitaría la información que me brinda EVENTOS, para eso debería reunirlos con estos últimos, para eso hago:

Código: Seleccionar todo
select P.ID_QUINIELA,P.ID_EVENTO, P.PRONOSTICO as PRONOSTICO
from QUINIELAS as Q inner join PRONOSTICOS as P on P.ID_QUINIELA=Q.ID_QUINIELA inner join EVENTOS as E on P.ID_EVENTO = E.ID_EVENTO
where P.ID_QUINIELA=4


Pero esto me devuelve una catarata de registros y no los 3 de la solución, es como si hiciera el producto cartesiano de todos y por eso me muestra registros que cumplen el WHERE pero no son correctos. Y aún me falta reunir la tabla EQUIPOS para obtener los nombres de los tales.

Alguien sabe qué estoy haciendo mal?

Muchas gracias y muy buen curso!
FABIAN2
 
Mensajes: 2
Registrado: Mié Ago 03, 2016 9:55 pm

Re: como utilizar el inner

Notapor Pere » Jue Ago 04, 2016 11:56 am

Hola Fabian,

Toda jornada tienes tres eventos, en tu consulta has omitido la condicion de la jornada por tanto estas recuperando los eventos de todas las jornada, y solo necesitas los de la jornada de la quiniela 4.

te falta la condicion:

p.id_jornada = e.id_jornada

------------------

nota: como no te piden ningun atributo de la quiniela, por ejemplo el nombre, puedes omitir la tabla QUINIELAS en la solución, dado que en la tabla pronosticos ya se guarda el ID_QUINIELA, el cual puedes filtrar a 4.

nota2: para obtener el nombre de los equipos deberás indicar dos veces la tabla equipos en la cláusula from mediantes alias de tabla, una fuente se usa para obtener el equipo local y la otra para el visitante.

-----------------

espero te sirva

saludos
Pere
 
Mensajes: 74
Registrado: Mar Feb 02, 2010 9:44 pm

Re: como utilizar el inner

Notapor FABIAN2 » Vie Ago 05, 2016 4:22 pm

Muchas gracias, Pere!

Ahora que lo volví a rever y me dibujé las tablas en una hoja aparte pude darme cuenta las condiciones que debían cumplirse, pude resolverlo!

No dejo la solución para que los demás puedan intentarlo pero si alguno se le complica demasiado puede enviarme un mensaje que se lo pasaré.

Saludos y nuevamente gracias!
FABIAN2
 
Mensajes: 2
Registrado: Mié Ago 03, 2016 9:55 pm


Volver a Soporte SQL desde cero

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 35 invitados