none
Consultas anidadas RRS feed

  • Pregunta

  • Que tal buen dia, espero me puedan ayudar, tengo una consulta que me devuelve un par de fechas y despues tengo aparte otra consulta que verifica que un campo de esa consulta coincida con las fechas de la consulta anterior, mas no hallo la forma que se comparen los valores de ambas consultas
    viernes, 9 de junio de 2017 14:59

Respuestas

Todas las respuestas

  • La consulta que retorna las fechas puedes utilizarla como una sub-consulta autónoma la misma que servirá como conjunto de comparación para la consulta externa, me explico:

    SELECT * FROM T1
    WHERE Fecha IN (SELECT Fecha FROM T2 WHERE <...>)

     
    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de junio de 2017 15:08
  • Disculpa, y si tengo en mi consulta 4 tablas de las que obtendre datos, como podría ser, lo que pasa es que hago dos INNER JOIN porque en cada inner hay dos campos que se pueden relacionar, solo que en uno estoy intentando acceder al dato del otro inner y me lanza error de que no pueden ser relacionados.

    Sera analizar mejor mi query o habra otra forma de realizarlo.

    Gracias.


    viernes, 9 de junio de 2017 15:22
  • ¿Puedes por favor adjuntar tu consulta y mencionar de manera mas clara y puntual lo que requieres?, sino seguiremos jugando a acertarle a la solución.
    viernes, 9 de junio de 2017 15:30
  • Esta es mi consulta, lo que deseo hacer es que traiga la clave que se menciona ahi, junto con su nombre, mas esos datos, mi condicion es que del segundo inner obtuvo fechas y esas fechas sirvan como condicion para filtrar la informacion del primer inner.

    Y el error que me lanza es de donde se encuentra el BETWEEEN, no se si estoy haciendo algo mal, espero puedan ayudarme.

    SELECT [AUS].[CLAVE], [EMP].[NOMBREN]+' '+[EMP].[NOMBREP]+' '+[EMP].[NOMBREM], [PER].[FECHA_INICIAL] AS INICIO, [PER].[FECHA_FINAL] AS FINAL, [AUS].[TIPO]
    FROM [Supervisor_giro].[EMPAUS] [AUS] INNER JOIN [Supervisor_giro].[EMPPRIN] [EMP] ON ([AUS].[CLAVE] = [EMP].[CLAVE]) AND ([AUS].[FECHAI] BETWEEN [PER].[FECHA_INICIAL] AND [PER].[FECHA_FINAL]),
    [Supervisor_giro].[TIPONOM] [NOM] INNER JOIN [Supervisor_giro].[PERIODO] [PER] ON [NOM].[ACTUAL] < 100 AND [PER].[NUMERO] = [NOM].[ACTUAL]

    Gracias.

    viernes, 9 de junio de 2017 15:34
  • ¿Cómo combinas la tabla TIPONOM?

    SELECT 
        [AUS].[CLAVE],
        [EMP].[NOMBREN] + ' ' + [EMP].[NOMBREP] + ' ' + [EMP].[NOMBREM],
        [PER].[FECHA_INICIAL] AS INICIO,
        [PER].[FECHA_FINAL] AS FINAL,
        [AUS].[TIPO]
    FROM 
        [Supervisor_giro].[EMPAUS] [AUS]
        INNER JOIN [Supervisor_giro].[EMPPRIN] [EMP] ON ([AUS].[CLAVE] = [EMP].[CLAVE])
    	   AND ([AUS].[FECHAI] BETWEEN [PER].[FECHA_INICIAL] AND [PER].[FECHA_FINAL])
        INNER JOIN [Supervisor_giro].[TIPONOM] [NOM] ON (...) ¿?
        INNER JOIN [Supervisor_giro].[PERIODO] [PER] ON  [PER].[NUMERO] = [NOM].[ACTUAL]
    	   AND [NOM].[ACTUAL] < 100


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de junio de 2017 16:12
  • Esa se relaciona con la tabla PERIODO, que seria de la parte ultima, ese INNER JOIN antes de lo señalado no va ahi, lo siento.
    viernes, 9 de junio de 2017 16:16
  • Hola Miguel:

    Veo que tu select, combina notacion SQL 2000 y SQL 2005+; lo cual brinda cierta ambiguedad, si bien SQL es capaz de armar el set de datos, sin embargo crea confusión:

    Espero que esta aproximación te puede servir de algo:

    ;WITH PER AS(
    SELECT [PER].[FECHA_INICIAL] AND [PER].[FECHA_FINAL] 
    FROM [Supervisor_giro].[TIPONOM] [NOM] 
    	INNER JOIN [Supervisor_giro].[PERIODO] [PER] ON [PER].[NUMERO] = [NOM].[ACTUAL]
    WHERE [NOM].[ACTUAL] < 100)
    SELECT [AUS].[CLAVE], 
    [EMP].[NOMBREN]+' '+[EMP].[NOMBREP]+' '+[EMP].[NOMBREM], 
    [PER].[FECHA_INICIAL] AS INICIO, 
    [PER].[FECHA_FINAL] AS FINAL, 
    [AUS].[TIPO]
    FROM [Supervisor_giro].[EMPAUS] [AUS] 
    INNER JOIN [Supervisor_giro].[EMPPRIN] [EMP] ON ([AUS].[CLAVE] = [EMP].[CLAVE]) 
    CROSS JOIN PER
    WHERE ([AUS].[FECHAI] BETWEEN [PER].[FECHA_INICIAL] AND [PER].[FECHA_FINAL])

    Sin embargo, seria bueno establecer que campos permite realizar una relacion unica entre [Supervisor_giro].[EMPPRIN] y [Supervisor_giro].[PERIODO] o entre [Supervisor_giro].[PERIODO] y [Supervisor_giro].[EMPAUS] [AUS] de modo tal que no se tenga que hacer un producto cartesiano (CROSS JOIN en mi propuesta o ',' en tu consulta inicial).

    Saludos cordiales.


    Camilo Villa


    viernes, 9 de junio de 2017 22:45
  • Deleted
    domingo, 11 de junio de 2017 12:58
  • Deleted
    domingo, 11 de junio de 2017 13:14