Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/04/2014, 05:28
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Consulta no funciona correctamente

Código MySQL:
Ver original
  1. SELECT Codigo_arbitro AS 'Cod_arbi',
  2.        Licencia AS 'Licenc',
  3.        Nombre AS 'Nom',
  4.        Apellidos AS 'Ape'
  5.     FROM EQUIPO_ARBITRAL INNER JOIN
  6.             (SELECT Codigo_localidad FROM PABELLON WHERE Codigo_pabellon=pabellon) Sbc
  7.                   ON EQUIPO_ARBITRAL.Cod_localidad=Sbc.Cod_localidad
  8.     WHERE Codigo_arbitro IN (SELECT * FROM TEMP)
  9.       AND Codigo_arbitro
  10.                   NOT IN (SELECT codigo
  11.                                     FROM TEMP4  
  12.                                     WHERE codigo
  13.                    NOT IN (SELECT codigo
  14.                                  FROM TEMP3
  15.                                  WHERE codigo
  16.                    NOT IN (SELECT codigo
  17.                                  FROM TEMP5
  18.                                  WHERE codigo
  19.                    NOT IN (SELECT codigo
  20.                                  FROM TEMP7
  21.                                  WHERE codigo
  22.                    NOT IN(SELECT codigo
  23.                                  FROM TEMP6)))))
  24.         ORDER BY Apellidos;

Claro que la seleccion de ciudad se podria hacer al obtener TEMP y no seria necesario ponerla aqui....

Código MySQL:
Ver original
  1. SELECT Codigo_arbitro AS 'Cod_arbi',
  2.        Licencia AS 'Licenc',
  3.        Nombre AS 'Nom',
  4.        Apellidos AS 'Ape'
  5.     FROM EQUIPO_ARBITRAL
  6.     WHERE Codigo_arbitro IN (SELECT * FROM TEMP)
  7.       AND Codigo_arbitro
  8.                   NOT IN (SELECT codigo
  9.                                     FROM TEMP4  
  10.                                     WHERE codigo
  11.                    NOT IN (SELECT codigo
  12.                                  FROM TEMP3
  13.                                  WHERE codigo
  14.                    NOT IN (SELECT codigo
  15.                                  FROM TEMP5
  16.                                  WHERE codigo
  17.                    NOT IN (SELECT codigo
  18.                                  FROM TEMP7
  19.                                  WHERE codigo
  20.                    NOT IN(SELECT codigo
  21.                                  FROM TEMP6)))))
  22.         ORDER BY Apellidos;

Si TEMP solo continene EQUIPO_ARBITRALes de la ciudad....


Código MySQL:
Ver original
  1. SELECT Codigo_arbitro AS 'Cod_arbi',
  2.        Licencia AS 'Licenc',
  3.        Nombre AS 'Nom',
  4.        Apellidos AS 'Ape'
  5.     FROM EQUIPO_ARBITRAL
  6.           INNER JOIN (SELECT codigo  
  7.                               FROM TEMP
  8.                               WHERE Codigo
  9.                                    NOT IN (SELECT codigo
  10.                                                 FROM TEMP4  
  11.                                                 WHERE codigo
  12.                                                    NOT IN (SELECT codigo
  13.                                                                 FROM TEMP3
  14.                                                                 WHERE codigo
  15.                                                                   NOT IN (SELECT codigo
  16.                                                                                 FROM TEMP5
  17.                                                                                 WHERE codigo
  18.                                                                                 NOT IN (SELECT codigo
  19.                                                                                               FROM TEMP7
  20.                                                                                               WHERE codigo
  21.                                                                                               NOT IN (SELECT codigo
  22.                                                                                                             FROM TEMP6)))))) SbcTemp
  23.                            ON EQUIPO_ARBITRAL.Codigo_arbitro=SbcTemp.codigo
  24.         ORDER BY Apellidos;

Ya hemos eliminado un IN ().... substituyendolo por un mas eficiente INNER JOIN .... ON

Ya te lo dije en otro post esa tabla es de ARBITROS NO de equipos arbítrales....

En TEMP ya podiamos haber recuperado
Licencia, Nombre, Apellidos, y ciudad y nos ahorrariamos un nivel de subconsultas.....

Código MySQL:
Ver original
  1. SELECT TEMP.Codigo_arbitro AS 'Cod_arbi',
  2.              TEMP.Licencia AS 'Licenc',
  3.              TEMP.Nombre AS 'Nom',
  4.              TEMP.Apellidos AS 'Ape'
  5.              FROM TEMP
  6.              WHERE TEMP.Codigo_arbitro
  7.                    NOT IN (SELECT codigo
  8.                                 FROM TEMP4  
  9.                                 WHERE codigo
  10.                                 NOT IN (SELECT codigo
  11.                                              FROM TEMP3
  12.                                              WHERE codigo
  13.                                              NOT IN (SELECT codigo
  14.                                                           FROM TEMP5
  15.                                                           WHERE codigo
  16.                                                           NOT IN (SELECT codigo
  17.                                                                        FROM TEMP7
  18.                                                                        WHERE codigo
  19.                                                                         NOT IN (SELECT codigo
  20.                                                                                       FROM TEMP6)))))
  21.              ORDER BY TEMP.Apellidos;

Simplificando....

NOT IN () se substituye por

...
tabla1 t1 LEFT JOIN tabla2 t2 ON t1.campo=t2.campo
WHERE t2.campo IS NULL
...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 25/04/2014 a las 05:53