Clientes.cli_cgcpf = nota_fiscal.nfs_id_cliente PARA clientes.cli_cgcpf <>nota_fiscal.nfs_id_cliente

5 respostas
juniorsatanas

Boa Noite !

Pessoal, estou querendo selecionar todos os clientes de uma tabela e relacionar com outra, ok, consigo fazer isso ! ele pega o id da tabela cliente e comprara com id fk da tabela notas fiscais :
MAIS O QUE EU QUERO FAZER É : pegar todos os clientes que não tem NOTAS FISCAIS e Deletar !


clientes.cli_cgcpf <> nota_fiscal.nfs_id_cliente;

DELETE !

COMO EU FAÇO ISSO ?

SELECT 
  clientes.cli_cgcpf, 
  clientes.cli_nome, 
  nota_fiscal.nfs_id_cliente, 
  clientes.cli_end, 
  clientes.cli_cep, 
  clientes.cli_city, 
  clientes.cli_uf, 
  clientes.cli_contat, 
  clientes.cli_tipo, 
  clientes.cli_areativ, 
  clientes.cli_fone, 
  clientes.cli_fax, 
  clientes.cli_cxpost, 
  clientes.cli_email, 
  clientes.cli_insest, 
  clientes.cli_celular, 
  clientes.doido, 
  clientes.id_serial
FROM 
  financeiro.clientes, 
  financeiro.nota_fiscal
WHERE 
  clientes.cli_cgcpf = nota_fiscal.nfs_id_cliente;
*************************************************************** TABELAS ***************************************************************
-- Table: financeiro.clientes

-- DROP TABLE financeiro.clientes;

CREATE TABLE financeiro.clientes
(
  cli_cgcpf character varying(14) NOT NULL,
  cli_nome character varying(80),
  cli_end character varying(80),
  cli_cep character varying(10),
  cli_city character varying(20),
  cli_uf character varying(2),
  cli_contat character varying(40),
  cli_tipo character varying(2),
  cli_areativ character varying(2),
  cli_fone character varying(11),
  cli_fax character varying(11),
  cli_cxpost character varying(5),
  cli_email character varying(80),
  cli_insest character varying(15),
  cli_celular character varying(11),
  doido character varying(50),
  id_serial serial NOT NULL,
  CONSTRAINT cliente_pkey PRIMARY KEY (cli_cgcpf)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE financeiro.clientes OWNER TO root;
-- Table: financeiro.nota_fiscal

-- DROP TABLE financeiro.nota_fiscal;

CREATE TABLE financeiro.nota_fiscal
(
  nfs_id integer NOT NULL,
  nfs_data_saida date,
  nfs_id_cliente character varying(255),
  nfs_nota_fiscal character varying(255),
  nfs_numero_contrato character varying(255),
  nfs_numero_processo character varying(255),
  nfs_status integer,
  nfs_tipo integer,
  nfs_valor_total double precision,
  nfs_cancelamento character varying(255),
  nfs_desconto double precision,
  nfs_obs character varying(255),
  CONSTRAINT nota_fiscal_pkey PRIMARY KEY (nfs_id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE financeiro.nota_fiscal OWNER TO postgres;

5 Respostas

claudiom

se tratando de um DELETE você pode fazer isso com o operador NOT IN …

acredito que isso seja uma correção que está fazendo na base de dados e não que o código vai fazer parte do seu sistema…
o NOT IN é péssimo para performance

juniorsatanas

Claudio Boa Noite !

juniorsatanas

Esse banco vem de 79, quer disser tem 31 anos, e mais velho que eu ! do clipppppper !

Agora vou da uma limpada !

Como ficaria o código ? poderia mostrar um exemplo ?

obrigado !

9.17.2. NOT IN

expression NOT IN (value[, …])
The right-hand side is a parenthesized list of scalar expressions. The result is “true” if the left-hand expression’s result is unequal to all of the right-hand expressions. This is a shorthand notation for

expression <> value1
AND
expression <> value2
AND

Se eu faço isso:

SELECT clientes.cli_cgcpf, clientes.cli_nome, nota_fiscal.nfs_id_cliente, clientes.cli_end, clientes.cli_cep, clientes.cli_city, clientes.cli_uf, clientes.cli_contat, clientes.cli_tipo, clientes.cli_areativ, clientes.cli_fone, clientes.cli_fax, clientes.cli_cxpost, clientes.cli_email, clientes.cli_insest, clientes.cli_celular, clientes.doido, clientes.id_serial FROM financeiro.clientes, financeiro.nota_fiscal WHERE clientes.cli_cgcpf &lt;&gt; nota_fiscal.nfs_id_cliente;

DIS : sem memoria, trava a máquina…

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

travou tudo aqui…

e agora ?

claudiom

você quer apagar todos clientes que não estejam na tabela de notas fiscais…

traduzido para sql:

delete from clientes where id_cliente not in (select id_cliente from notas_fiscais)
juniorsatanas

DELETE FROM financeiro.clientes WHERE cli_cgcpf NOT IN (SELECT nfs_id_cliente FROM financeiro.nota_fiscal);
SELECT * FROM financeiro.clientes WHERE cli_cgcpf NOT IN (SELECT nfs_id_cliente FROM financeiro.nota_fiscal)

Obrigado Resolvir o problema ! agora tem um porém : como eu faço para jogar esses dados em uma tabela temperaria ?

se não for pedir de mais !

Obrigado mais uma fez !

Criado 26 de julho de 2010
Ultima resposta 26 de jul. de 2010
Respostas 5
Participantes 2