Ir para conteúdo

POWERED BY:

Arquivado

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

dudufantastico

select com left join e campo nulo

Recommended Posts

Galera,

 

to com um problema para fazer um select deem uma olhada na modelagem abaixo:

 

teste

id

produto

 

teste2

id2

id

unidade

 

nada de excepcional, uma relação 1:n entre as tabelas teste e teste2.

 

vamos supor que tenhamos os dados abaixo:

 

insert into teste(produto) values('arroz'),('feijão'),('macarrão')

 insert into teste2(id,unidade) values(1,'unidade1'),(2,'unidade1');

 insert into teste2(id,unidade) values(1,'unidade2'),(2,'unidade2'),(3,'unidade2');
Então tenho 3 produtos, a unidade1 tem 2 e na undiade2 tenho os 3 produtos.

 

O problema é o seguinte preciso fazer um select que me retorne todos os produtos, mas de uma unidade específica algo como segue abaixo

 

select teste.produto, teste2.unidade from teste left join teste2 on teste.id=teste2.id where teste2.unidade = 'unidade1'

esse select me retorna:

arroz , unidade1

feijão , unidade1

 

e o que eu preciso é algo assim:

 

arroz , unidade1

feijão , unidade1

macarrão , null

 

até entendo o que acontece, o campo unidade = 'unidade1' e não unidade is null, mas não consigo arrumar, até já coloquei um campo unidade = 'unidade1' or unidade is null, mas também não funciona. Estou usando postgresql mas acredito que isso possa ser feito em qualquer banco já que não tem nenhuma função específica.

 

Alguém pode me dar uma luz?

 

grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está somente mostrando o seguinte resultado:

arroz , unidade1

feijão , unidade1

porque 1o você une as tabelas e depois coloca a condição de que seja a unidade1.

 

Para retornar o que você quer, o select tem que ser o seguinte:

select teste.produto, teste2.unidade from teste left join teste2 on teste.id=teste2.id and teste2.unidade = 'unidade1'
ou seja, a condição da unidade1 tem que estar na condição de união das tabelas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Dudu

 

para lhe trazer desta forma

 

arroz , unidade1

feijão , unidade1

macarrão , null

 

na sua select

você nao deve por na clausula where teste2.unidade = 'unidade1'

 

pois você esta definindo somente para trazer os dados que tenho o campo teste2.unidade preenchido com o valor 'unidade1'

 

então faça assim : select teste.produto, teste2.unidade from teste left outer join teste2 on teste.id=teste2.id

 

e junto do join coloque o outer.

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.