SQL - UNION

13/03/2019

0

Tenho a seguinte consulta
SELECT SATIVIDADEALUNO.CODCOLIGADA,
       SATIVIDADEALUNO.IDATIVIDADE,
       SATIVIDADEALUNO.IDOFERTA,
       SATIVIDADE.DESCRICAO,
       CONVERT(VARCHAR(MAX), SATIVIDADEALUNO.RA) CODPARTICIPANTE,
       PPESSOA.NOME                              NOMEPARTICIPANTE,
       'A'                                       TIPOPARTICIPANTE,
       'Aluno'                                   TIPOPARTICIPANTEDESCRICAO,
       SALUNO.CODPESSOA
FROM   SALUNO (NOLOCK)
       INNER JOIN SHABILITACAOALUNO (NOLOCK)
         ON SHABILITACAOALUNO.RA = SALUNO.RA
            AND SHABILITACAOALUNO.CODCOLIGADA = SALUNO.CODCOLIGADA
       INNER JOIN SATIVIDADEALUNO (NOLOCK)
         ON SATIVIDADEALUNO.IDHABILITACAOFILIAL = SHABILITACAOALUNO.IDHABILITACAOFILIAL
            AND SATIVIDADEALUNO.RA = SHABILITACAOALUNO.RA
            AND SATIVIDADEALUNO.CODCOLIGADA = SHABILITACAOALUNO.CODCOLIGADA
       INNER JOIN PPESSOA (NOLOCK)
         ON PPESSOA.CODIGO = SALUNO.CODPESSOA
       INNER JOIN SATIVIDADE (NOLOCK)
         ON SATIVIDADE.CODCOLIGADA = SATIVIDADEALUNO.CODCOLIGADA
            AND SATIVIDADE.IDOFERTA = SATIVIDADEALUNO.IDOFERTA
WHERE  CUMPRIUATIVIDADE = 'N'
       AND SATIVIDADEALUNO.IDPERLET = @P
       AND SATIVIDADEALUNO.IDOFERTA = :IDOFERTA
UNION
SELECT SATIVIDADEPROFESSOR.CODCOLIGADA,
       SATIVIDADEPROFESSOR.IDATIVIDADEPROF,
       SATIVIDADEPROFESSOR.IDOFERTA,
       SATIVIDADE.DESCRICAO,
       CONVERT(VARCHAR(MAX), SATIVIDADEPROFESSOR.CODPROF) CODPARTICIPANTE,
       PPESSOA.NOME                                       NOMEPARTICIPANTE,
       'P'                                                TIPOPARTICIPANTE,
       'Professor'                                        TIPOPARTICIPANTEDESCRICAO,
       SPROFESSOR.CODPESSOA
FROM   SATIVIDADEPROFESSOR
       INNER JOIN SATIVIDADE (NOLOCK)
         ON SATIVIDADE.CODCOLIGADA = SATIVIDADEPROFESSOR.CODCOLIGADA
            AND SATIVIDADE.IDOFERTA = SATIVIDADEPROFESSOR.IDOFERTA
       INNER JOIN SPROFESSOR (NOLOCK)
         ON SPROFESSOR.CODPROF = SATIVIDADEPROFESSOR.CODPROF
            AND SPROFESSOR.CODCOLIGADA = SATIVIDADEPROFESSOR.CODCOLIGADA
       INNER JOIN PPESSOA (NOLOCK)
         ON PPESSOA.CODIGO = SPROFESSOR.CODPESSOA
WHERE  CUMPRIUATIVIDADE = 'N'
       AND DTINICIO >= @DTI
       AND DTTERMINO <= @DTF
       AND SATIVIDADEPROFESSOR.IDOFERTA = :IDOFERTA

Antes de colocar o campo como varchar o retorno do union colocava o Código do participante como inteiro, isto sem ter sido definido. Nas tabelas onde o campo é buscado apenas o código da pessoa é inteiro todo o restante é Varchar (vide função SP_HELP).
Gostaria de entender o por que disto. Alguém sabe dizer?
Chromusmaster

Chromusmaster

Responder

Post mais votado

14/03/2019

talvez ele se baseie no tipo de campo da última tabela utilizada.

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

13/03/2019

Emerson Nascimento

Você obtém o resultado de CODPARTICIPANTE de campos de duas tabelas distintas: SATIVIDADEALUNO.RA e SATIVIDADEPROFESSOR.CODPROF.

Acredito que um desses campos deve estar definido como inteiro.

Responder

13/03/2019

Chromusmaster

Você obtém o resultado de CODPARTICIPANTE de campos de duas tabelas distintas: SATIVIDADEALUNO.RA e SATIVIDADEPROFESSOR.CODPROF.

Acredito que um desses campos deve estar definido como inteiro.

Na verdade são de três tabela, a consulta anterior é apenas um trecho dela. Na terceira tabela o codigo do participante é definido como inteiro. Nestes casos, o Union vai se basear na diferença entre os campos? Deveria ter pedo varchar, já que dois campo são varchar, não?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar