Jump to content


Photo

Retornar Consulta Com Valores Nulos


  • Faça o login para participar
1 reply to this topic

#1 Fábio Web Arts

Fábio Web Arts

    Web IN Arts

  • Usuários
  • 299 posts
  • Sexo:Masculino
  • Localidade:No Saco De Magé
  • Interesses:Tudo que for da área de Informática

Posted 15/08/2011, 12:44

Boa tarde,

estou tendo problemas para retornar valores de uma consulta que no qual a tabela contem valores nulos,

exemplo tenho um sistema de cobranca que no qual o cliente nunca foi cobrado, entao as colunas DT_RECOB e HR_RECOB ficam vazias ou seja nulas,

dae se alguem cobrar esse cliente vai entrar a data para ser recobrado, com isso esse cliente so ira voltar quando essa data for <= a data atual NOW(),

eu fiz uma query que so esta me retornando os que tem data, mais eu queria todos se possivel,

SELECT * FROM `TBL_CLI` WHERE `DT_RECOB` <= NOW() AND `HR_RECOB` <= NOW() ORDER BY `DT_RECOB` DESC, `HR_RECOB` DESC

queria que ela tbm retornasse os clientes com DT_RECOB e HR_RECOB == NULL

#2 Romeu

Romeu

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Masculino

Posted 23/08/2011, 09:07

Olá Fábio,

Você está cometendo um erro lógico. Porque apesar da tradução de Null ser nulo este estado e zero são coisas completamente diferentes. Null (que vem do alemão, num sentido de ausência total de qualquer coisa ali, mesmo um zero ou um valor insignificante) quer dizer que não existe nada ali que possa ser comparado. Não há como fazer operações de comparação com um dado misterioso. Nem um NULL seria equivalente a outro NULL (teste e descubra se duvidar). Quando você quiser deixar campos sem dados o mais recomendável é atribuir um valor como 0 (zero), ou qualquer coisa assim. (Tente criar um defalt em suas tabelas)

Passado isto você tem ali uma busca que está trazendo todos os clientes que devem ser cobrados. Por isto é um outro erro lógico (fora do nível de programação) esperar a consulta retornasse os clientes sem dívidas.

Diagnóstico Teórico: reestruture seu banco de dados de uma maneira mais lógica. De preferência planeje-o no papel antes de construí-lo.

Diagnóstico Prático: nem sempre isto é possível ou faz sentido. Quer achar um valor NULL? O comando para isso é IS NULL.

Assim:

SELECT * FROM `TBL_CLI` WHERE `DT_RECOB` IS NULL OR `HR_RECOB` IS NULL

Quer as duas coisas juntas? Coloque um OR em sua consulta lá em cima, ou (mais seguro) crie uma união entre as consultas.

Edição feita por: Romeu, 23/08/2011, 09:09.





0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq