Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Freisleben

select com union all

Recommended Posts

Olá pessoal!

 

 

Tenho uma tela onde deve retornar dados de todos os grupos cadastrados.......até aí...consegui montar o SELECT...porém antes de mais nada preciso verificar se dentro destes grupos existe registro na tabela histórico, se sim preciso trazer o último histórico do grupo.

Conclusão: Se o grupo possuir histórico trazer o último resgistro e se não possuir, trazer somente os dados cadastrados(tab_grupo).

 

Pensei em utilizar UNION ALL porém não deu certo.

 

 

Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abaixo segue script que estou tentando rodar, o que preciso é que a consulta me traga todos os dados da tab_grupo_emp e se existir historico do id_grupo na tabela tab_hist_diario_bordo me traga os dados do historico, mais lista os dados da tab_grupo_emp que não conter ainda historico.

 

 

SELECT 
tab_grupo_emp.id_grupo,
cod_grupo,
nome_grupo,
tab_grupo_emp.id_lote,
nome_lote,
tab_hist_diario_bordo.id_usuario,
nome,
tab_hist_diario_bordo.id_status_diario_bordo,
status_diario_bordo,
dta_hist_diario_bordo
FROM tab_grupo_emp, tab_lote_migracao, tab_usuario, tab_hist_diario_bordo, tab_status_diario_bordo
WHERE tab_grupo_emp.id_lote = tab_lote_migracao.id_lote
AND tab_hist_diario_bordo.id_usuario = tab_usuario.id_usuario
AND tab_hist_diario_bordo.id_status_diario_bordo = tab_status_diario_bordo.id_status_diario_bordo
AND tab_grupo_emp.id_grupo = tab_hist_diario_bordo.id_grupo

Compartilhar este post


Link para o post
Compartilhar em outros sites

use query multipla

 

escopo exemplo:

SELECT 
     ID
    ,field2
    ,( SELECT field FROM Table2 WHERE Table1.ID = ID LIMIT 1 ) AS field3
    ,( SELECT field FROM Table3 WHERE Table1.ID = ID LIMIT 1 ) AS field4
FROM 
    Table1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelo dica hinom, tenho somente uma duvida sobre esta query multipla.

 

SELECT field FROM Table2 WHERE Table1.ID = ID LIMIT 1 ) AS field3

 

Neste select como eu posso selecionar mais que um campo? Pois exemplo gostaria de selecionar o id_usuario e nome

 

Olha como estou fazendo.

SELECT 
id_grupo,
cod_grupo,
nome_grupo,
tab_grupo_emp.id_lote,
tab_hist_diario_bordo.id_usuario
nome_lote,
( SELECT nome
  FROM tab_hist_diario_bordo 
  WHERE tab_grupo_emp.id_grupo = tab_hist_diario_bordo.id_grupo
  AND tab_hist_diario_bordo.id_usuario = tab_usuario.id_usuario) AS nome

FROM tab_grupo_emp, tab_lote_migracao, tab_usuario

WHERE tab_grupo_emp.id_lote = tab_lote_migracao.id_lote

Resultado desta consulta, agora gostaria de selecionar também o id_usuario

 

id_grupo cod_grupo nome_grupo id_lote nome_lote id_usuario nome

XXX XXXX XXXX XXXX XXX XXXX XXXXX

Compartilhar este post


Link para o post
Compartilhar em outros sites

não pode selecionar mais de um campo ou mais de um registro.

 

porém, é possível selecionar 2 ou mais campos, unindo-os como string usando a função CONCAT()

 

exemplo

 

( SELECT CONCAT( nome, '|', id_usuario )  FROM tab_hist_diario_bordo   WHERE tab_grupo_emp.id_grupo = tab_hist_diario_bordo.id_grupo  AND tab_hist_diario_bordo.id_usuario = tab_usuario.id_usuario) AS nome

CONCAT( nome, '|', id_usuario ), retornará o escopo "NOME|id_usuario"

exemplo:

 

FOO BAR|100

FOO BAR NETO|101

etc..

 

no PPH, utilize a função

explode( '|', LinhaDaConsulta )

entendeu ?

 

 

 

mais uma coisa..

 

No subselect, adicione LIMIT 1 apenas por segurança.

Apesar de que a consulta provavelmente retornará somente 1 row mesmo devido à busca pelos indices primários, é bom colocar LIMIT 1 pra evitar retorno de mais de 1 registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.