PROBLEMAS COM CLAUSULA UNION

 Tópico anterior Próximo tópico Novo tópico

PROBLEMAS COM CLAUSULA UNION

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#492265 - 21/01/2020 11:26:42

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


Bom dia,
Tenho um banco de dados mysql com tres tabelas: uma com dados completos, uma com Alunos ativos e uma com ex-alunos
fiz uma query:
(Select Ativos.Matricula, Ativos.Entrada, Ativos.Curso, Completos, Nome, Completos.Endereço FROM Ativos INNER JOIN Completos ON Ativos.Matricula = Completos.Matricula WHERE Completos.Nome LIKE 'CLAUDIO%')
UNION (Select Excluidos.Matricula, Excluidos.Entrada, Excluidos.Curso, Completos, Nome, Completos.Endereço FROM Excluidos INNER JOIN Completos ON Excluidos.Matricula = Completos.Matricula WHERE Completos.Nome LIKE 'CLAUDIO%' GROUP BY Excluidos.Matricula)

Nessa query, se o aluno estiver ativo e ja frequentou outro curso, ele aparece duas vezes, minha intenção nesse caso é que apareça somente os dados da tabela Ativos, se aparecer os dados da tabela Excluidos

Obrigado

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#492269 - 21/01/2020 15:56:48

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Porque está separando escopo de conjunto?

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


Resposta escolhida #492270 - 21/01/2020 16:31:19

FILMAN
PRESIDENTE PRUDENTE
Cadast. em:Março/2010


Eu faço a mesma pergunta que o KERPLUNK, acredito que sua normalização não está muito legal quando o sistema crescer.

  
  
Instruir-te-ei, e ensinar-te-ei o caminho que deves seguir; guiar-te-ei com os meus olhos. (Salmos 32:8)

www.cursoexcelvba.com.br

#492271 - 21/01/2020 16:39:42

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Me refiro aos parênteses, são totalmente desnecessários. Eles estão ali para fazerem escopo de conjunto, coisa que você não precisa. Você pode simplesmente fazer assim:

Select Ativos.Matricula, Ativos.Entrada, Ativos.Curso, Ativos.Nome, Completos.Endereço FROM Ativos INNER JOIN Completos ON Ativos.Matricula = Completos.Matricula WHERE Completos.Nome LIKE 'CLAUDIO%'
UNION
Select Excluidos.Matricula, Excluidos.Entrada, Excluidos.Curso,  Excluidos.Nome, Excluidos.Endereço FROM Excluidos INNER JOIN Completos ON Excluidos.Matricula = Completos.Matricula WHERE Completos.Nome LIKE 'CLAUDIO%'
GROUP BY Excluidos.Matricula


_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#492273 - 21/01/2020 17:56:00

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


Obrigado KERP, não sabia quanto a não necessidade dos parênteses,
FILMAN,  estou montando esta query de inicio para poder obter o retorno de dados que necessito, mas será mais implementada e trabalhada

Apesar da ajuda dos dois amigos, ainda fica a duvida de como resolver a duplicidade do dado quando presente nas duas tabelas: Ativos e Excluidos, se isso é possivel e uma query
ou devo realizar duas querys separadas dando um loop para verificar a duplicação de Aluno

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#492274 - 21/01/2020 17:58:37

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


PS:
Estou jogando o resultado dessa query num list (of T), não tentei excluir a duplicidade pelo list, pois acho que pela query o resultado seja mais rapido

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#492275 - 21/01/2020 18:24:12

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Qual dos dois exatamente você quer:
- Listar todos os ativos que não estejam nos excluídos
- Listar todos os ativos que TAMBÉM estejam nos excluídos
- Listar ambos, mas especificando o status(se ativo ou excluído)


_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#492276 - 21/01/2020 18:47:46

FILMAN
PRESIDENTE PRUDENTE
Cadast. em:Março/2010


Se eu entendi bem seria isso:



SELECT
    A.Matricula, A.Entrada, A.Curso As CursoID, A.Nome As NomeCurso, C.Nome, C.Endereço
    FROM Ativos A
    INNER JOIN Completos C ON (A.Matricula = C.Matricula)
    WHERE C.Nome LIKE 'CLAUDIO%'
UNION
SELECT
    E.Matricula, E.Entrada, E.Curso As CursoID, E.Nome As NomeCurso, E.Nome, E.Endereço
    FROM Excluidos E
    INNER JOIN Completos C ON E.Matricula = C.Matricula
    WHERE C.Nome LIKE 'CLAUDIO%'
        AND E.MATRICULA NOT EXISTS(SELECT A.Matricula FROM Ativos A WHERE A.Matricula = E.Matricula);


  
  
Instruir-te-ei, e ensinar-te-ei o caminho que deves seguir; guiar-te-ei com os meus olhos. (Salmos 32:8)

www.cursoexcelvba.com.br

#492297 - 23/01/2020 11:50:52

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


FILMAN, era exatamente isso que queria, fiz alguns ajustes no SQL e o resultado foi o esperado, ficou assim:
Citação:
                  Select
                    A.Matricula, A.Entrada, A.Curso As CursoID, A.Nome As NomeCurso, C.Nome, C.Endereço
                    From Ativos A
                    INNER Join Completos C ON (A.Matricula = C.Matricula)
                    WHERE C.Nome Like 'CLAUDIO%'
                UNION
                Select
                    E.Matricula, E.Entrada, E.Curso As CursoID, E.Nome As NomeCurso, E.Nome, E.Endereço
                    From Excluidos E
                    INNER Join Completos C ON E.Matricula = C.Matricula
                    WHERE C.Nome Like 'CLAUDIO%'
                        And Not EXISTS(SELECT A.Matricula FROM Ativos A WHERE A.Matricula = E.Matricula);


KERPLUNK, pelo pouco que vi sobre você no VBM, entendo completamente sua pergunta anterior. Querer entender corretamente o que o usuário necessita e o próprio usuario entendet o que ele quer, para poder oferecer o melhor resultado

Demorei pra responder pois ontem não tive tempo de acessar nada, e hoje fui testar o exemplo do FILMAN e realizar os ajustes necessários pra rodar

Obrigado aos dois que me auxiliaram

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por DAMASCENO.CESAR em 23/01/2020 11:51:03