Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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
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
Table1Obrigado 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
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.
Mostre a consulta para esclarecer melhor a sua dúvida!