none
Consulta con Union RRS feed

  • Pregunta

  • Que tal , quisiera solicitar su apoyo para la siguiente consulta:

    Select P.ID, C.Nombre,"CATEDRATICO" from Profesores as P

    inner join  CatalogoEscolar as C   ON (P.ID= C.ID)

    UNION

    sELECT C.Id, C.Nombre,"NO CATEDRATICO" from CatalogoEScolar as C

    Pero me gustaría que ya no me salieran las personas de la primer parte del union, cual seria una manera "limpia" de hacerlo?


    Para que algo tenga sentido, no es necesario que tenga sentido

    lunes, 30 de enero de 2017 15:18

Respuestas

  • Hola,

    Los resultados del primer conjunto se producen por la combinación de filas con la tabla [Profesores], entonces el segundo conjunto debe discriminar las filas que hagan match con alguna fila de la tabla [Profesores], puedes utilizar el operador EXISTS:

    EXISTS (Transact-SQL)

    SELECT 
        P.ID, C.Nombre, 'CATEDRATICO' AS Tipo
    FROM 
        Profesores AS P
        INNER JOIN CatalogoEscolar AS C ON (P.ID = C.ID)
    UNION
    SELECT 
        C.Id, C.Nombre, 'NO CATEDRATICO' 
    FROM 
        CatalogoEscolar AS C
    WHERE
        NOT EXISTS (SELECT 1 FROM Profesores WHERE ID = C.ID)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 30 de enero de 2017 15:49
  • Trata:

    SELECT
    	P.ID, C.Nombre,"CATEDRATICO" AS col1 
    FROM
    	Profesores AS P
    	INNER JOIN
    	CatalogoEscolar AS C ON (P.ID = C.ID)
    
    UNION
    
    SELECT
    	C.ID, C.Nombre,"NO CATEDRATICO" AS col1 
    FROM
    	Profesores AS P
    	RIGHT OUTER JOIN
    	CatalogoEscolar AS C ON (P.ID = C.ID)
    WHERE
    	P.ID IS NULL
    GO
    El segundo query usa un OUTER JOIN / WHERE para identificar las filas que no machan en la otra tabla.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    lunes, 30 de enero de 2017 15:42

Todas las respuestas

  • Trata:

    SELECT
    	P.ID, C.Nombre,"CATEDRATICO" AS col1 
    FROM
    	Profesores AS P
    	INNER JOIN
    	CatalogoEscolar AS C ON (P.ID = C.ID)
    
    UNION
    
    SELECT
    	C.ID, C.Nombre,"NO CATEDRATICO" AS col1 
    FROM
    	Profesores AS P
    	RIGHT OUTER JOIN
    	CatalogoEscolar AS C ON (P.ID = C.ID)
    WHERE
    	P.ID IS NULL
    GO
    El segundo query usa un OUTER JOIN / WHERE para identificar las filas que no machan en la otra tabla.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    lunes, 30 de enero de 2017 15:42
  • Hola,

    Los resultados del primer conjunto se producen por la combinación de filas con la tabla [Profesores], entonces el segundo conjunto debe discriminar las filas que hagan match con alguna fila de la tabla [Profesores], puedes utilizar el operador EXISTS:

    EXISTS (Transact-SQL)

    SELECT 
        P.ID, C.Nombre, 'CATEDRATICO' AS Tipo
    FROM 
        Profesores AS P
        INNER JOIN CatalogoEscolar AS C ON (P.ID = C.ID)
    UNION
    SELECT 
        C.Id, C.Nombre, 'NO CATEDRATICO' 
    FROM 
        CatalogoEscolar AS C
    WHERE
        NOT EXISTS (SELECT 1 FROM Profesores WHERE ID = C.ID)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 30 de enero de 2017 15:49