Left Join retonando somente um registro

3 respostas
A

Olá pessoal,

Tenho a tabela X com relacionamento @OneToMany com a tabela Y.

Em um relatório eu preciso que seja exibido o registro da tabela X e o ultimo registro da tabela Y.

É o mesmo caso de um site de compras onde é exibido a descrição do pedido e o ultimo histório do processo de compra (EM ANALISE, AUTORIZADO, ENVIADO ETC) em uma unica liha.

Alguem sabe como fazer isso?

A solução provisoria que eu fiz foi colocar uma datatable no jsf exibindo somente uma linha, mas isso não é correto, pois a SQL retorna todas as linhas.

Vlw

3 Respostas

S

Pode usar o seguinte SQL:

SELECT camposPai, camposFilho FROM pai p
LEFT JOIN filho f ON p.id = f.id_pai AND (f.data = (SELECT MAX(f1.data) FROM filho f1 WHERE f1.id_pai = p.id))

Obs: considerei que o campo que define “último” é o campo data da tabela filho. Esta sintaxe pode váriar dependendo do banco de dados, precisa conferir como o “=” se comporta com selects de grupo aninhado.

A

Obrigado samuel.grigolato!

Vou testar!

Você sabe como ficaria usando o criteria?

Vlw

S

Está falando de Hibernate?

Sei que com HQL pode aninhar SELECTS da mesma forma, com Criteria talvez tenha como, mas não vou saber exemplificar.

Criado 29 de julho de 2010
Ultima resposta 29 de jul. de 2010
Respostas 3
Participantes 2