Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/04/2014, 02:33
Avatar de temerariomalaga
temerariomalaga
 
Fecha de Ingreso: marzo-2013
Ubicación: Londres
Mensajes: 156
Antigüedad: 11 años, 1 mes
Puntos: 9
Consulta no funciona correctamente

Tengo una consulta que va filtrando los codigos de otras tablas para devolver los resultados filtados.
Os explico que contiene cada tabla.
-TEMP: Contiene los códigos de la tabla Equipo_arbitral que estan disponibles el dia de un partido.
-TEMP3: Contiene los códigos de los árbitros que cumplen una diferencia entre horas (si por ejemplo tienen un partido ya asignado a las 17:00 no se le podrá asignar un partido en el rango desde las 15:15 hasta las 18:45)
-TEMP4: Contiene los códigos de los árbitros que no cumplen la diferencia de horas (Por algún motivo en el if en el que compruebo el rango horario en esta tabla también me inserta los que si cumplen el rango por lo que tengo que filtrarlo posteriormente, cosa que hago en estas consultas)
-TEMP5: Contiene los árbitros que tienen algún partido el mismo dia del partido que se va a asignar
-TEMP6: Contiene los códigos de los árbitros que tienen un partido el mismo dia del partido a asignar y cumplen los rangos horarios.
-TEMP7: Contiene los códigos de los árbitros que tienen un partido el mismo dia del partido y no cumplen los rangos horarios.

Ahora aquí esta la consulta:
Código MySQL:
Ver original
  1. SELECT COUNT(*) INTO @regs FROM EQUIPO_ARBITRAL WHERE Codigo_arbitro IN (SELECT * FROM TEMP) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP4  WHERE codigo NOT IN(SELECT codigo FROM TEMP3)) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP5 WHERE codigo NOT IN(SELECT codigo FROM TEMP7)) AND Cod_localidad=
  2.                 (SELECT Codigo_localidad FROM PABELLON WHERE Codigo_pabellon=pabellon) ORDER BY Apellidos;
  3.     IF(SELECT @regs)>=3 THEN
  4.         SELECT Codigo_arbitro AS 'Cod_arbi', Licencia AS 'Licenc', Nombre AS 'Nom', Apellidos AS 'Ape' FROM EQUIPO_ARBITRAL WHERE Codigo_arbitro IN (SELECT * FROM TEMP) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP4  WHERE codigo NOT IN(SELECT codigo FROM TEMP3)) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP5 WHERE codigo NOT IN(SELECT codigo FROM TEMP7)) AND Cod_localidad=
  5.                     (SELECT Codigo_localidad FROM PABELLON WHERE Codigo_pabellon=pabellon) ORDER BY Apellidos;
  6.     ELSE
  7.         SELECT COUNT(*) INTO @regs2 FROM EQUIPO_ARBITRAL WHERE Codigo_arbitro IN (SELECT * FROM TEMP) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP4  WHERE codigo NOT IN(SELECT codigo FROM TEMP3)) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP5 WHERE codigo NOT IN(SELECT codigo FROM TEMP7)) AND Cod_localidad IN
  8.             (SELECT Codigo_localidad FROM LOCALIDAD WHERE Codigo_sede=(SELECT SEDE.Codigo_sede FROM PABELLON INNER JOIN LOCALIDAD ON PABELLON.Codigo_localidad=LOCALIDAD.Codigo_localidad
  9.             INNER JOIN SEDE ON LOCALIDAD.Codigo_sede=SEDE.Codigo_sede
  10.             WHERE Codigo_pabellon=pabellon)) ORDER BY Apellidos;
  11.         IF(SELECT @regs2)>=3 THEN
  12.             SELECT Codigo_arbitro AS 'Cod_arbi', Licencia AS 'Licenc', Nombre AS 'Nom', Apellidos AS 'Ape' FROM EQUIPO_ARBITRAL WHERE Codigo_arbitro IN (SELECT * FROM TEMP) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP4  WHERE codigo NOT IN(SELECT codigo FROM TEMP3)) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP5 WHERE codigo NOT IN(SELECT codigo FROM TEMP7)) AND Cod_localidad IN
  13.                 (SELECT Codigo_localidad FROM LOCALIDAD WHERE Codigo_sede=(SELECT SEDE.Codigo_sede FROM PABELLON INNER JOIN LOCALIDAD ON PABELLON.Codigo_localidad=LOCALIDAD.Codigo_localidad
  14.                 INNER JOIN SEDE ON LOCALIDAD.Codigo_sede=SEDE.Codigo_sede
  15.                 WHERE Codigo_pabellon=pabellon)) ORDER BY Apellidos;
  16.         ELSE
  17.             SELECT Codigo_arbitro AS 'Cod_arbi', Licencia AS 'Licenc', Nombre AS 'Nom', Apellidos AS 'Ape' FROM EQUIPO_ARBITRAL WHERE Codigo_arbitro IN (SELECT * FROM TEMP) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP4  WHERE codigo NOT IN(SELECT codigo FROM TEMP3)) AND Codigo_arbitro NOT IN(SELECT codigo FROM TEMP5 WHERE codigo NOT IN(SELECT codigo FROM TEMP7));
  18.         END IF;
  19.     END IF;
No se el por qué pero si intento asignar un partido a las 18:00 de un viernes me aparecen los que ya tienen un partido asignado por ejemplo a las 17:00.
__________________
Málaga Club de Fútbol: Memoria, Compromiso, Fe