Select retornando NULL se uma das tabelas, não conter valor

Forum sobre SQL.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Select retornando NULL se uma das tabelas, não conter valor

Mensagem por porter »

Olá pessoal, essa instrução SQL, soma dois campos em duas tabelas, se as duas tabelas contem valores, está somando corretamente, mas se uma das tabelas, não conter valor, ela retorna NULL como resultado, como faço para retornar um valor, se uma das tabelas não conter nenhum valor ?

SELECT

SUM(R.PAGO+M.VALOR) SOMATORIA

FROM tabela1 R, tabela2 M

WHERE R.RBCODCLI = 1 AND M.CCLIENTE = 1;

MySql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Select retornando NULL se uma das tabelas, não conter valor

Mensagem por JoséQuintas »

COALESCE() pega o primeiro valor que não seja NULL.

Exemplos:

Código: Selecionar todos

COALESCE( NULL, NULL, 0 )
COALESCE( A.valor, B.Valor, 0 )
COALESCE( A.valor , 0 ) + COALESCE( B.valor, 0 )
COALESCE( A.nome, '' )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Select retornando NULL se uma das tabelas, não conter valor

Mensagem por Itamar M. Lins Jr. »

Olá!
Não entendi a pergunta, nem a resposta.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Select retornando NULL se uma das tabelas, não conter valor

Mensagem por Itamar M. Lins Jr. »

Olá!
Mudando na estrutura das tabelas para ser NOT NULL ?
Null + 10 = Null é isso ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Select retornando NULL se uma das tabelas, não conter valor

Mensagem por JoséQuintas »

Não.
Mesmo que mude estrutura, um SELECT pode retornar NULL se for relacionado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Select retornando NULL se uma das tabelas, não conter valor

Mensagem por porter »

Olá Itamar, obrigado por sua atenção
Nessa instrução, tenho duas tabelas, serão somados o campo PAGO da tabela1 e o campo VALOR da tabela 2, se as duas tabelas satisfazer a condição, ele soma corretamente, mas se uma das tabelas não satisfizer a condição, ele está retornando NULL, mas deveria retornar um valor, se pelo uma das tabelas satisfizer a condição, entendeu.

SELECT
SUM(R.PAGO+M.VALOR) SOMATORIA
FROM tabela1 R, tabela2 M
WHERE R.RBCODCLI = 1 AND M.CCLIENTE = 1;
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Select retornando NULL se uma das tabelas, não conter valor

Mensagem por Itamar M. Lins Jr. »

Olá!

Código: Selecionar todos

SELECT (R.PAGO + M.VALOR) as SOMATORIA FROM...
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Select retornando NULL se uma das tabelas, não conter valor

Mensagem por alxsts »

Olá!
porter escreveu:...essa instrução SQL, soma dois campos em duas tabelas, se as duas tabelas...
Não... você está confundindo as coisas. SUM opera apenas em uma tabela. Você pode somar uma coluna (ex: SUM( qtde ) ) ou somar o resultado de uma expressão (ex: SUM( qtde * valor ) ), na mesma tabela.

Para fazer o que você precisa, precisa fazer o SUM em cada tabela e depois somar os dois...

Código: Selecionar todos

SELECT SUM( t.n ) Somatorio
  FROM ( SELECT SUM( PAGO ) n
           FROM tabela1
          WHERE RBCODCLI = 1
UNION ALL
        SELECT SUM( valor ) n 
          FROM tabela2 
         WHERE CCLIENTE = 1 ) AS t
Outra coisa: SUM ignora valores NULL na expressão. Portanto, não precisa usar Coalesce().

Veja: MySQL SUM
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Select retornando NULL se uma das tabelas, não conter valor

Mensagem por Itamar M. Lins Jr. »

Olá!
Tava lendo na internet... Mas lá é mais difícil de aprender por conta das perguntas...
Vi assim entre aspas () sem o SUM(). E vi com UNION ALL
Agora esse COALESCE() neste caso não vi com ele se encaixa.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder