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

Consulta SQL en MySQL

Estas en el tema de Consulta SQL en MySQL en el foro de Bases de Datos General en Foros del Web. Hola!! Llevo tiempo si hacer consultas en sql y la verdad que la falta de practica se nota y mucho!!! ya que vamos la consulta ...
  #1 (permalink)  
Antiguo 27/07/2010, 13:44
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Consulta SQL en MySQL

Hola!!

Llevo tiempo si hacer consultas en sql y la verdad que la falta de practica se nota y mucho!!! ya que vamos la consulta que quiero hacer es bastante tonta pero no soy capaz por mucho que me paro a pensarla..........

Bueno tengo 3 tablas:

-Equipo (idequipo, nombre)
-Partido (idpartido, jornada, jugado)
-EquipoPartido (idequipo, idepartido, golesmarcados, golesrecibidos, modo)


Aclaraciones:
-jugado toma valores SI o NO
-modo toma valores de: Local y Visitante


No quiero entrar a discutir si es la mejor forma de tener las tablas, solo quiero ayuda para hacer la siguiente consulta:

Seleccionar el nombre de los equipos, la jornada, los goles, saliendo a la izquierda el equipo local y a la derecha el equipo visitante. Algo asi:

Jornada - Equipo Local - Goles Local - Goles Visitante - Equipo Visitante

Ejemplo: 1 Real Betis 2 - 2 Atc de Madrid

PD: Si podeis usar las subconsultas en vez del JOIN me gustaría mas, pero bueno tampoco me quiero poner tikismikis que encima ayuda el que puede y como puede!! jeje


Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 28/07/2010, 08:33
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta SQL en MySQL

alguien que me pueda ayudar por favor?? gracias!
  #3 (permalink)  
Antiguo 28/07/2010, 09:14
 
Fecha de Ingreso: junio-2010
Mensajes: 76
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Consulta SQL en MySQL

La consulta sola seria algo asi como :
SELECT * FROM Partido pt inner join EquipoPartido ep on ep.idepartido=pt.idpartido inner join Equipo eq on eq.idequipo=ep.idequipo;
Con esto tienes las 3 tablas relacionadas por los ID.
Despues utiliza algun WHERE.
Si quieres hacer mas cosas postea y ya lo veremos.
  #4 (permalink)  
Antiguo 28/07/2010, 11:19
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta SQL en MySQL

muchas gracias por contestarme!

Tal como me lo pones el local y el visitante siguen sin relacionarse. No se que sentencia en el where hay que poner para que se me quede como dije en mi primer mensaje: Es decir: Seleccionar la jornada 1 por ejemplo y que te salga:

ornada - Equipo Local - Goles Local - Goles Visitante - Equipo Visitante

Ejemplo: 1 Real Betis 2 - 2 Atc de Madrid

gracias de nuevo por responderme
  #5 (permalink)  
Antiguo 28/07/2010, 16:35
 
Fecha de Ingreso: enero-2007
Ubicación: Cali - Valle
Mensajes: 135
Antigüedad: 17 años, 3 meses
Puntos: 4
Respuesta: Consulta SQL en MySQL

Buenas tardes yosoloyo

Pues yo creo no estoy seguro q el codigo q podrias utilizar seria:
Código SQL:
Ver original
  1. SELECT Idpartido,
  2.        Jornada,
  3.        LOCAL,
  4.        Goleslocal,
  5.        Visitante,
  6.        Golvisitante
  7.   FROM (SELECT p.Idpartido,
  8.                p.Jornada,
  9.                e.Nombre LOCAL,
  10.                Ep.Golesmarcados Goleslocal,
  11.                NULL Visitante,
  12.                NULL Golvisitante
  13.           FROM Equipopartido Ep,
  14.                Equipo        e,
  15.                Partido       p
  16.          WHERE p.Idpartido = Ep.Idepartido
  17.            AND Ep.Idequipo = e.Idequipo
  18.            AND Ep.Modo = 'Local'
  19.         UNION
  20.         SELECT p.Idpartido,
  21.                p.Jornada,
  22.                NULL LOCAL,
  23.                NULL Goleslocal,
  24.                e.Nombre Visitante,
  25.                Ep.Golesmarcados Golvisitante
  26.           FROM Equipopartido Ep,
  27.                Equipo        e,
  28.                Partido       p
  29.          WHERE p.Idpartido = Ep.Idepartido
  30.            AND Ep.Idequipo = e.Idequipo
  31.            AND Ep.Modo = 'Visitante')
  32.  WHERE Idpartido = 15;

Esa podria ser una base para que trabajes la consulta.

Saludos.
  #6 (permalink)  
Antiguo 29/07/2010, 00:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta SQL en MySQL

Prueba así:
SELECT l.jornada, l.idpartido, l.nombre Local, l.golesmarcados goleslocal, v.golesmarcados golesvisitante, v.nombre Visitante FROM((select ep.idpartido, p.jornada, e.nombre, ep.golesmarcados FROM partido p INNER JOIN Equipopartido ep ON p.idpartido = ep.idpartido INNER JOIN Equipo e ON e.idequipo = ep.idequipo WHERE p.jugado = "SI" AND ep.modo = "Local")l,(select ep.idpartido, p.jornada, e.nombre, ep.golesmarcados FROM partido p INNER JOIN Equipopartido ep ON p.idpartido = ep.idpartido INNER JOIN Equipo e ON e.idequipo = ep.idequipo WHERE p.jugado = "SI" AND ep.modo = "Visitante")v) GROUP BY l.idpartido
  #7 (permalink)  
Antiguo 29/07/2010, 03:28
 
Fecha de Ingreso: junio-2010
Mensajes: 76
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Consulta SQL en MySQL

Aqui pongo una consulta que hace lo que pides pero por duplicado
SELECT pt.jornada, eq.nombre as Local, ep.golesmarcados, ep.golesrecibidos, eq.nombre as Visitante FROM Partido pt inner join EquipoPartido ep on ep.idepartido=pt.idpartido inner join Equipo eq on eq.idequipo=ep.idequipo WHERE pt.jugado=1 AND ep.idepartido=pt.idpartido;

El problema no es la consulta sino la estructura de la tabla
  #8 (permalink)  
Antiguo 29/07/2010, 04:55
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta SQL en MySQL

Hola!!!

Muchas gracias a todos por vuestros aportes!!!!


La respuesta de jurena es la que mas se aproxima a lo que yo quiero pero hay un problemilla:

El nombre del equipo local bien, los goles locales bien pero el equipo y goles visitantes siempre coge los del partido con id = 1 que esté como visitante. No se si me explico.

gracias de nuevo y haber si lo pueden finiquitar
  #9 (permalink)  
Antiguo 29/07/2010, 05:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta SQL en MySQL

yosoloyo,
usa ésta, pues creo que otendrás todo lo que quieres y es más rápida:

select p.jornada, ep.idpartido, e.nombre Local, ep.golesmarcados golesLocal, ep.golesrecibidos golesVisitante, v.nombre Visitante FROM partido p INNER JOIN Equipopartido ep ON p.idpartido = ep.idpartido INNER JOIN Equipo e ON e.idequipo = ep.idequipo INNER JOIN(select ep.idpartido, p.jornada, e.nombre, ep.golesmarcados FROM partido p INNER JOIN Equipopartido ep ON p.idpartido = ep.idpartido INNER JOIN Equipo e ON e.idequipo = ep.idequipo WHERE p.jugado = "SI" AND ep.modo = "Visitante")v ON v.jornada = p.jornada AND v.idpartido = ep.idpartido GROUP BY p.jornada, ep.idpartido
  #10 (permalink)  
Antiguo 29/07/2010, 06:34
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta SQL en MySQL

Cita:
Iniciado por jurena Ver Mensaje
yosoloyo,
usa ésta, pues creo que otendrás todo lo que quieres y es más rápida:

select p.jornada, ep.idpartido, e.nombre Local, ep.golesmarcados golesLocal, ep.golesrecibidos golesVisitante, v.nombre Visitante FROM partido p INNER JOIN Equipopartido ep ON p.idpartido = ep.idpartido INNER JOIN Equipo e ON e.idequipo = ep.idequipo INNER JOIN(select ep.idpartido, p.jornada, e.nombre, ep.golesmarcados FROM partido p INNER JOIN Equipopartido ep ON p.idpartido = ep.idpartido INNER JOIN Equipo e ON e.idequipo = ep.idequipo WHERE p.jugado = "SI" AND ep.modo = "Visitante")v ON v.jornada = p.jornada AND v.idpartido = ep.idpartido GROUP BY p.jornada, ep.idpartido
Casi casi!!!!! jeje muchas gracias pero hay algun fallo que no comprendo porque se produce:

En cada jornada de liga se produce un enfrentamiento en esa consulta que en el que se repite tanto el local como el visitante. Ejemplo:

Código MySQL:
Ver original
  1. jornada     idp     Local   golesLocal  golesVisitante  Visitante
  2. 1   1   AC Milan    0   0   Villarreal CF
  3. 1   2   Sevilla FC  0   0   Real Betis
  4. 1   3   Chelsea FC  0   0   AS Roma
  5. 1   4   Real Madrid CF  0   0   Real Madrid CF
  6. 1   5   Real Club D. Espanyol   0   0   Newcastle United
  7. 1   6   SSC Napoles     0   0   SSC Napoles
  8. 1   7   Liverpool FC    0   0   Inter de Milan
  9. 1   8   Manchester United   0   0   Manchester United

Como ves se repite tanto el enfrentamiento con idp=4 como el enfrentamiento con idp=8 y en mi base de datos correctamente enlaza el partido 4 que debería ser: Real Madrid - Bayern Munich y el de idp=8 que debería ser United - City

Aqui te pongo como en la talba equipopartido está correctamente guardado los ide's distintos y no iguales:
Código MySQL:
Ver original
  1. ide     idp     golesmarcados   golesrecibidos  modo
  2. 2   4   0   0   V
  3. 21  4   0   0   L
  4. 43  8   0   0   L
  5. 1   8   0   0   V
El ide = 2 es Real Madrid, el ide= 21 es Bayern Munich, el ide= 1 es el United y el City es el ide= 43

muchas gracias de nuevo y siento que te tengas que quebrar la cabeza de esta forma
  #11 (permalink)  
Antiguo 29/07/2010, 09:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta SQL en MySQL

A mí me funciona bien, pero debes cuidar mucho que en Equipopartido estén las dos fichas por partido rellenas, es decir, la del Local y la del Visitante, y que además ese partido tenga asignada la jornada y ya esté jugado (jugado = "SI"). No puede haber par de jornada, partido repetidos. Revisa todos los datos, y si sigue dándote problemas pon una sintaxis de exportación de datos para que yo la importe y haga una prueba con tus datos reales.
  #12 (permalink)  
Antiguo 29/07/2010, 10:03
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta SQL en MySQL

Gracias de nuevo una vez mas. Me sigue fallando. Te he intentado pasar por mensaje privado los datos pero el texto es demasiado largo (21 mil caracteres para los 3 mil maximo que se puede). Hay alguna forma de adjuntar archivos??


Lo que es esta parte funciona perfectamente, pero al unirla como subconsulta a la otra es cuando cada 2 o 3 partidos da el error:

select ep.idp, p.jornada, e.nombre, ep.golesmarcados FROM partido p INNER JOIN equipopartido ep ON p.idp = ep.idp INNER JOIN equipo e ON e.ide = ep.ide WHERE p.jugado = "NO" AND ep.modo = "V" and p.jornada=1


gracias!
  #13 (permalink)  
Antiguo 29/07/2010, 10:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta SQL en MySQL

escríbeme un mensaje privado y te proporcionaré mi correo personal para que me hagas llegar ese archivo SQL. Pero las respuestas las subiré al POST, porque de eso se trata en un foro
  #14 (permalink)  
Antiguo 29/07/2010, 12:18
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta SQL en MySQL

si por supuesto sin problema que como bien dices un hilo sin solución no es para nada util. Gracias

pd: privado enviado
  #15 (permalink)  
Antiguo 29/07/2010, 16:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta SQL en MySQL

Si lanzas esto, ¿qué ocurre?:
select ep.idp, p.jornada, e.nombre Local, ep.golesmarcados GolesLocal, ep.golesrecibidos GolesVisitante, v.nombre Visitante FROM partido p INNER JOIN Equipopartido ep ON p.idp = ep.idp INNER JOIN Equipo e ON e.ide = ep.ide AND ep.modo = "L" INNER JOIN (select ep.idp, p.jornada, e.nombre, ep.golesmarcados FROM partido p INNER JOIN Equipopartido ep ON p.idp = ep.idp INNER JOIN Equipo e ON e.ide = ep.ide AND ep.modo = "V")v ON (p.idp = v.idp AND p.jornada = v.jornada) GROUP BY p.jornada, p.idp

Observa que no he condicionado que el partido se haya celebrado.
  #16 (permalink)  
Antiguo 29/07/2010, 16:51
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta SQL en MySQL

Pues si lanzo esa consulta solo te puedo decir que eres una maquina! jeje y que muchisimas gracias por la ayuda!! Sin duda un grandisimo colaborador, Excepcional!! muchas gracias de nuevo!!
  #17 (permalink)  
Antiguo 06/08/2010, 15:41
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta SQL en MySQL

perdonar que reabra el tema pero.........
select ep.idp, p.jornada, e.nombre Local, ep.golesmarcados GolesLocal, ep.golesrecibidos GolesVisitante, v.nombre Visitante FROM partido p INNER JOIN Equipopartido ep ON p.idp = ep.idp INNER JOIN Equipo e ON e.ide = ep.ide AND ep.modo = "L" INNER JOIN (select ep.idp, p.jornada, e.nombre, ep.golesmarcados FROM partido p INNER JOIN Equipopartido ep ON p.idp = ep.idp INNER JOIN Equipo e ON e.ide = ep.ide AND ep.modo = "V")v ON (p.idp = v.idp AND p.jornada = v.jornada) GROUP BY p.jornada, p.idp

Esta consulta se podria hacer sin join??

gracias
  #18 (permalink)  
Antiguo 07/08/2010, 04:35
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta SQL en MySQL

Bueno al final era un tonteria, era por las mayusculas y minusculas

gracias a todos en especial a jurena una vez mas

Etiquetas: mysql, sql
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 02:13.