Duvidas em relação à uma sub-query.

Banco de Dados

08/04/2020

Olá, boa tarde.
A situação é a seguinte.
Tenho 2 tabelas, uma de clientes e outra de faturas.
Na tabela faturas o mesmo clientes aparece varias vezes, porem preciso identificar todos os clientes que não possuem faturas em atraso ou nenhuma pendencia financeira.

O meu select ficou assim.

SELECT c.nome,c.telefone,c.celular FROM dba.clientes c WHERE id NOT IN(SELECT id_cliente FROM dba.faturas WHERE pago = ''''''''NÃO'''''''' and coalesce(restado,0) <> 1);

Mas ele não me da nenhum retorno.
No aguardo.
Jhonatan Alves

Jhonatan Alves

Curtidas 0

Melhor post

Ricardo Arraes

Ricardo Arraes

08/04/2020

Olá, boa tarde.
A situação é a seguinte.
Tenho 2 tabelas, uma de clientes e outra de faturas.
Na tabela faturas o mesmo clientes aparece varias vezes, porem preciso identificar todos os clientes que não possuem faturas em atraso ou nenhuma pendencia financeira.

O meu select ficou assim.

SELECT c.nome,c.telefone,c.celular FROM dba.clientes c WHERE id NOT IN(SELECT id_cliente FROM dba.faturas WHERE pago = ''''''''NÃO'''''''' and coalesce(restado,0) <> 1);

Mas ele não me da nenhum retorno.
No aguardo.


Boa noite!

No caso, o cliente sempre vai ter uma fatura vinculada porém com o status PAGO definido como SIM ou NAO?
se sim, tente:

SELECT fat.id_cliente, c.nome, c.telefone, c.celular FROM dba.faturas AS fat LEFT JOIN dba.clientes AS c ON fat.id_cliente=c.id WHERE fat.pago='NÃO' ...

Se houver algum periodo em que o cliente não terá nenhuma fatura vinculada:
SELECT c.nome,c.telefone,c.celular, (SELECT c.nome,c.telefone,c.celular FROM dba.clientes c WHERE id NOT IN(SELECT id_cliente FROM dba.faturas WHERE pago = ''''''''SIM'''''''' ...) AS fatura FROM dba.clientes c HAVING fatura IS NULL

Não consegui simular isso, então pode haver algum erro de sintaxe. De qualquer forma, espero ajudar no raciocínio... :)
GOSTEI 1

Mais Respostas

Ricardo Arraes

Ricardo Arraes

08/04/2020

Olá, boa tarde.
A situação é a seguinte.
Tenho 2 tabelas, uma de clientes e outra de faturas.
Na tabela faturas o mesmo clientes aparece varias vezes, porem preciso identificar todos os clientes que não possuem faturas em atraso ou nenhuma pendencia financeira.

O meu select ficou assim.

SELECT c.nome,c.telefone,c.celular FROM dba.clientes c WHERE id NOT IN(SELECT id_cliente FROM dba.faturas WHERE pago = ''''''''NÃO'''''''' and coalesce(restado,0) <> 1);

Mas ele não me da nenhum retorno.
No aguardo.


Boa noite!

No caso, o cliente sempre vai ter uma fatura vinculada porém com o status PAGO definido como SIM ou NAO?
se sim, tente:

SELECT fat.id_cliente, c.nome, c.telefone, c.celular FROM dba.faturas AS fat LEFT JOIN dba.clientes AS c ON fat.id_cliente=c.id WHERE fat.pago='NÃO' ...

Se houver algum periodo em que o cliente não terá nenhuma fatura vinculada:
SELECT c.nome,c.telefone,c.celular, (SELECT c.nome,c.telefone,c.celular FROM dba.clientes c WHERE id NOT IN(SELECT id_cliente FROM dba.faturas WHERE pago = ''''''''SIM'''''''' ...) AS fatura FROM dba.clientes c HAVING fatura IS NULL

Não consegui simular isso, então pode haver algum erro de sintaxe. De qualquer forma, espero ajudar no raciocínio... :)


**Correção na ultima query:

SELECT c.nome,c.telefone,c.celular, (SELECT fat.id FROM dba.faturas AS fat WHERE fat.id_cliente=c.id AND fat.pago = ''''''''NAO'''''''' ...) AS fatura FROM dba.clientes c HAVING fatura IS NULL

GOSTEI 1
Emerson Nascimento

Emerson Nascimento

08/04/2020

tente assim:
SELECT
	nome,telefone,celular
FROM
	dba.clientes
WHERE
	not id in (SELECT id_cliente FROM dba.faturas WHERE pago <> 'SIM' and vencimento < getdate())
GOSTEI 1
Jhonatan Alves

Jhonatan Alves

08/04/2020

Olá, boa tarde senhores.
Obrigado pelo retorno, eu acabei resolvendo o problema e não salvei a query para compartilhar com os senhores.
Sou DBA em iniciação, ainda estou me adaptando e das próximas vezes prometo trazer um retorno.
Certamente abrirei novos tópicos compartilhando duvidas e na medida do possível ajudarei quem estiver com duvidas.

Att.
Jhonatan Alves.
GOSTEI 0
POSTAR