Fórum Como montar um UpDate baseado na pesquisa entre duas tabelas #459535
25/10/2013
0
Tenho no BD Firebird 4 tabelas: TB_Estado, TB_Cidade, TB_Bairro, TB_Endereco
o bicho papão é: criei e adicionei dados para essas tabelas atravéz de scripts até aqui tudo beleza
sendo: TB_Estado 27 registros TB_Cidade 9.920 registros TB_Bairro 56.016 registros TB_Endereco 849.344 registros
quando tentei criar relacionamento entre as tabelas pelos campos ID foi que percebi que na TB_Endereco existe alguns endereços que ID da cidade não existe
Ai então na TB_Endereco criei um novo campo FLEG_DELETE varchar(1)
preciso fazer um UPDATE percorendo todos os registros da TB_Endereco e gravando no campo FLEG_DELETE = 'S' se caso END_CIDADE_ID <> CIDADE_ID
Campos da TB_CIDADE
Cidade_ID integer (PK)
Cidade_UF_ID integer (FK)
Cidade_CEP_GERAL varchar(8)
Cidade_DESCRICAO varchar(35)
Campos da TB_ENDERECO
Endereco_Bairro_ID interger (FK)
Endereco_Cidade_ID integer (FK)
Endereco_CEP varchar(8)
Endereco_Logradouro varchar(150)
Endereco_Complemento varchar(50)
FLEG_DELETE varchar(1)
como montar um um UpDate para gravar na TB_Endereco no campo FLEG_DELETE = ''S' se Endereco_Cidade_ID <> Cidade_ID
desculpe os blablas é q estou tentando deixar mais claro possivel o entendimento
Everaldo Torres
Curtir tópico
+ 0Posts
26/10/2013
Alex Lekao
Tente assim vamos ver se da certo, faca um backup antes e tal... rsrsr
update e set e.fleg_delete = 'S' from tb_endereco e, tb_cidade c where e.Endereco_Cidade_ID <> c.Cidade_ID and (e.endereco_cidadde_id is null or e.endereco_cidade_id = '')
veja se da certo e posta ai o resultado.
Talvez seja interessante verificar o script que esta usando para retornar os resultados pq possa estar precisando de algum ajuste que corrija se o problema estiver com as junções ou relacionamentos.
Espero ter ajudado.
Abraco.
Alex - Lekao
Gostei + 0
29/10/2013
Thiago Irrazabal
SET TERM ^ ;
CREATE PROCEDURE SP_ATUALIZA_FLAG
AS
DECLARE VARIABLE ENDERECO_CIDADE_ID INTEGER;
BEGIN
FOR SELECT A.ENDERECO_CIDADE_ID FROM TB_ENDERECO A
INNER JOIN TB_CIDADE B ON B.CIDADE_ID <> A.ENDERECO_CIDADE_ID
INTO :ENDERECO_CIDADE_ID DO
BEGIN
UPDATE TB_ENDERECO
SET FLEG_DELETE = 'S'
WHERE ENDERECO_CIDADE_ID = :ENDERECO_CIDADE_ID;
END
SUSPEND;
END^
SET TERM ; ^
GRANT SELECT,UPDATE ON TB_ENDERECO TO PROCEDURE SP_ATUALIZA_FLAG;
GRANT SELECT ON TB_CIDADE TO PROCEDURE SP_ATUALIZA_FLAG;
GRANT EXECUTE ON PROCEDURE SP_ATUALIZA_FLAG TO "PUBLIC";
GRANT EXECUTE ON PROCEDURE SP_ATUALIZA_FLAG TO SYSDBA;
Espero ter ajudado.
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
03/11/2013
Everaldo Torres
Gostei + 0
03/11/2013
Everaldo Torres
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)