Comparar Campos nulls

SQL Server

14/05/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
Jose Alves

Jose Alves

Curtidas 0

Respostas

Jair N.

Jair N.

14/05/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
GOSTEI 0
Jose Alves

Jose Alves

14/05/2014

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

Jair N.

14/05/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.
GOSTEI 0
Jose Alves

Jose Alves

14/05/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
GOSTEI 0
Alex Lekao

Alex Lekao

14/05/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
GOSTEI 0
Jose Alves

Jose Alves

14/05/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


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 
GOSTEI 0
Alex Lekao

Alex Lekao

14/05/2014

Otimo.

Entao resolveu.

Parabens!!!

Obrigado por postar a solucao.

Abraco.

Alex - Lekao
GOSTEI 0
POSTAR