Array
(
)

Comparar Campos nulls

Jose Alves
   - 14 mai 2014

ola, pedia ajuda aqui num comando que estou a ter dificuldades. é o seguinte:
eu tenho uma tabela A com os dados
A-
1
2 Barcelos
3 Braga
4 Guimaraes
etc
e uma B
B-
1 Jose Braga
2 Luis Guimaraes
3 Rodrigo
4 Joaquim Barcelos
e queria fazer um select para ir buscar o id em vez do nome
resultado do select que preciso
1 Jose 3
2 Luis 4
3 Rodrigo 1 -> problema aqui nao compara null com null
4 Joaquim 2
com um left join retorno todas as linhas certas que nao sejam null mas as null fica vazio. nao consegue comparar.
Alguem sabe de alguma solucao? obrigado

Jair A.n.
   - 15 mai 2014

Bom Dia use "RIGHT JOIN" ou pegando na cláusula "FROM" como principal a tabela mais povoada, exemplo algo assim: SELECT B.*, A.* FROM B LEFT JOIN A ON (A.nome LIKE B.nome + '%') ORDER BY B.nome;

Atc

Jose Alves
   - 15 mai 2014

boas. a parte do " +'%' " nao funciona , nao detecta o + para concatenar

Jair A.n.
   - 15 mai 2014

Boa Tarde, realmente por pressa cometi um engano segue abaixo agora correto
SELECT B.*, A.* FROM B LEFT JOIN A ON (B.nome LIKE '%' + A.nome) ORDER BY B.nome;
Isto para M.S.SQLServer o "+" funciona sim em teste o atributo "nome" é VARCHAR ok...

Atc.

Jose Alves
   - 15 mai 2014

Peço desculpa eu meti no topico errado, nao é em sql server mas sim em postgres. Pedia a um moderador para meter no topico certo, sff

mas mesmo assim substituí o + pelo concat

SELECT B.*, A.* FROM B LEFT JOIN A ON (B.nome LIKE CONCAT( '%' , A.nome)) ORDER BY B.nome

e continua a não dar.
nos registos que ele encontrava anteriormente está a duplicar metendo o id certo numa linha e o id do campo null noutra para todos os registos, menos nos registos que o texto é null , aí continua a nao meter nada

Alex Lekao
   - 15 mai 2014

Ola Boa tarde!!!

Eu sugiro tratar os nulls antes das comparacoes.

Nao sei como faz o PostGree mas no SQL vc pode usar o isnull(campo,vazio) por exemplo e com isso ele substitui o que estiver com null pela palavra que vc colocou na ultima sentenca da sintaxe, assim vc consegue comparar.

Espero ter ajudado.

Abraco.

Alex - Lekao

Jose Alves
   - 16 mai 2014

Alex - Lekao obrigado pela ajuda. Depois do que disse , eu procurei uma função semelhança á que deu mas para postgres e encontrei. a Funcao é COALESCE



Solucao final


#Código

SELECT B.id,B.nome,COALESCE ( A.id,A.id,//aqui é o valor que queremos meter caso seja null, no meu caso 1) FROM B LEFT JOIN A ON (B.nome LIKE  A.nome) ORDER BY B.nome

Alex Lekao
   - 16 mai 2014

Otimo.

Entao resolveu.

Parabens!!!

Obrigado por postar a solucao.

Abraco.

Alex - Lekao