2
respostas

join com critério

Supondo que eu tenha duas tabelas Tab1 e Tab2 com os seguintes dados:

Tab1:

************
| id | nome |
-----------------------
| 1 | João   |
| 2 |  Maria |
| 3 | José   |
| 4 | Juca   |
**************

Tab2:

****************************
| id | Endereço | status |
-----------------------------
| 1 | Rua do João | null    |
| 2 | Rua da Maria | Ativo  |
| 3 | Rua do José | Inativo |
*****************************

Agora, considere as seguintes queries:

Query 1:

SELECT t1.nome, t2.endereco
FROM  t1
    LEFT JOIN t2 
        ON t2.codigo = t1.codigo AND t2.status = "Ativo"

Query 2:

SELECT t1.nome, t2.endereco
FROM  t1
    LEFT JOIN t2 
        ON t2.codigo = t1.codigo
WHERE t2.status  ="Ativo"

Usando o Banco Oracle como base, a query 1 vai me dar o seguinte retorno:

**********************
| nome | Endereco     |
------------------------
| João  | null         |
| Maria | Rua da Maria |
| José  | null         |
| Juca  | null         |
************************

A query 2 vai me dar o seguinte retorno:

***********************
| nome  | Endereco     |
------------------------
| Maria | Rua da Maria |
************************

A pergunta é, como fazer no JPQL uma consulta com o mesmo efeito da query 1 ?

2 respostas

Boa tarde Issac, tudo bem?

Na JQPL também podemos colocar a palavra LEFT no join. E não sei muito bem se é isto, mas provavelmente o t2.status deveria estar em um where, não?

Desculpe não poder testar seu código pois não tenho como fazer o código, mas imagino que a palavra "left" antes do join do JQPL resolva também.

Abraços.

Oi Camilla, desculpa a demora em responder.

Acho que meu questinamento não ficou muito claro. Vou tentar explicar melhor:

Supondo que eu tenha duas tabelas Tab1 e Tab2 com os seguintes dados:

Tab1:

************
| id | nome |
-----------------------
| 1 | João   |
| 2 |  Maria |
| 3 | José   |
| 4 | Juca   |
**************

Tab2:

****************************
| id | Endereço | status |
-----------------------------
| 1 | Rua do João | null    |
| 2 | Rua da Maria | Ativo  |
| 3 | Rua do José | Inativo |
*****************************

Agora, considere as seguintes queries:

Query 1:

SELECT t1.nome, t2.endereco
FROM  t1
    LEFT JOIN t2 
        ON t2.codigo = t1.codigo AND t2.status = "Ativo"

Query 2:

SELECT t1.nome, t2.endereco
FROM  t1
    LEFT JOIN t2 
        ON t2.codigo = t1.codigo
WHERE t2.status  ="Ativo"

Usando o Banco Oracle como base, a query 1 vai me dar o seguinte retorno:

**********************
| nome | Endereco     |
------------------------
| João  | null         |
| Maria | Rua da Maria |
| José  | null         |
| Juca  | null         |
************************

A query 2 vai me dar o seguinte retorno:

***********************
| nome  | Endereco     |
------------------------
| Maria | Rua da Maria |
************************

A pergunta é, como fazer no JPQL uma consulta com o mesmo efeito da query 1 ?