Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Aquino

[Resolvido] Deletar cliente menos um certo conjunto

Recommended Posts

Bom dia,

 

Preciso deletar alguns cliente do banco de dados, porém preciso deletar apenas os clientes que não foram movimentado.

 

O resultado do Select abaixo, me trás todos os clientes cadastrados, com a condição para ser deletado.

 

SELECT
CG.COD_CADASTRO
FROM TBCADASTROGERAL CG 
LEFT OUTER JOIN TBCLIENTE C ON C.COD_CADASTRO = CG.COD_CADASTRO
WHERE C.COD_VENDEDOR = '48120'

 

Já o Select abaixo, mostra os clientes da consulta acima, que tiveram movimento e não podem ser deletados

 

SELECT DISTINCT COD_CLI_FOR FROM TBSAIDAS
WHERE COD_CLI_FOR IN (SELECT
CG.COD_CADASTRO
FROM TBCADASTROGERAL CG 
LEFT OUTER JOIN TBCLIENTE C ON C.COD_CADASTRO = CG.COD_CADASTRO

WHERE C.COD_VENDEDOR = '48120')

ORDER BY 1;

 

 

Agora preciso fazer um delete, que delete todos os clientes da primeira consulta, menos os que tiveram a movimentação informada na segunda consulta.

 

Alguém pode me ajudar?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

NOT

 

SELECT DISTINCT COD_CLI_FOR FROM TBSAIDAS
WHERE COD_CLI_FOR NOT IN (SELECT
CG.COD_CADASTRO
FROM TBCADASTROGERAL CG 
LEFT OUTER JOIN TBCLIENTE C ON C.COD_CADASTRO = CG.COD_CADASTRO

WHERE C.COD_VENDEDOR = '48120')

ORDER BY 1;

 

Só não tenho certeza se com OUTER funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

NOT

 

SELECT DISTINCT COD_CLI_FOR FROM TBSAIDAS
WHERE COD_CLI_FOR NOT IN (SELECT
CG.COD_CADASTRO
FROM TBCADASTROGERAL CG 
LEFT OUTER JOIN TBCLIENTE C ON C.COD_CADASTRO = CG.COD_CADASTRO

WHERE C.COD_VENDEDOR = '48120')

ORDER BY 1;

 

Só não tenho certeza se com OUTER funciona.

 

 

 

tentei assim:

 

DELETE 
FROM TBCADASTROGERAL CG 
LEFT OUTER JOIN TBCLIENTE C ON C.COD_CADASTRO = CG.COD_CADASTRO
WHERE C.COD_VENDEDOR = '48120' 
AND CG.COD_CADASTRO NOT IN (SELECT DISTINCT COD_CLI_FOR 
FROM TBSAIDAS
WHERE COD_CLI_FOR IN (SELECT CG.COD_CADASTRO
FROM TBCADASTROGERAL CG 
LEFT OUTER JOIN TBCLIENTE C ON C.COD_CADASTRO = CG.COD_CADASTRO
WHERE C.COD_VENDEDOR = '48120'))

 

 

Mas também não funcionou. Tirei o OUTER, mas também não deu certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT DISTINCT COD_CLI_FOR FROM TBSAIDAS
WHERE COD_CLI_FOR NOT IN (SELECT CG.COD_CADASTRO
                         FROM TBCADASTROGERAL CG 
                         WHERE C.COD_CADASTRO = CG.COD_CADASTRO
                         AND C.COD_VENDEDOR = '48120')
ORDER BY 1

 

De outra forma

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo, executei o seguinte código:

 

DELETE FROM TBCADASTROGERAL WHERE COD_CADASTRO IN (SELECT 
CG.COD_CADASTRO 
FROM TBCADASTROGERAL CG 
LEFT OUTER JOIN TBCLIENTE C ON C.COD_CADASTRO = CG.COD_CADASTRO 
WHERE C.COD_VENDEDOR = '48120' 
AND CG.COD_CADASTRO NOT IN (SELECT DISTINCT S.COD_CLI_FOR
FROM TBSAIDAS S
LEFT OUTER JOIN TBCADASTROGERAL CGC ON CGC.COD_CADASTRO = S.COD_CLI_FOR
LEFT OUTER JOIN TBCLIENTE CC ON CC.COD_CADASTRO = CGC.COD_CADASTRO
WHERE  CC.COD_VENDEDOR = '48120'))

 

Obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.