Comparar Campos nulls
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
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
Curtidas 0
Respostas
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
Atc
GOSTEI 0
Jose Alves
14/05/2014
boas. a parte do " +'%' " nao funciona , nao detecta o + para concatenar
GOSTEI 0
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.
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
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
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
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
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
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
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
14/05/2014
Otimo.
Entao resolveu.
Parabens!!!
Obrigado por postar a solucao.
Abraco.
Alex - Lekao
Entao resolveu.
Parabens!!!
Obrigado por postar a solucao.
Abraco.
Alex - Lekao
GOSTEI 0