• 0
Sign in to follow this  
SombraVarvas

alteração de dados com base em dados de 2 tabelas via postgresql

Question

Olá,

estou modelando um banco de dados de CEP.

já estou com todos os dados falta agora o bendito código de municipio do ibge

consegui uma tabelinha com o código IBGE .

No entanto eu teria que alterar os registos no campo "CIDADE" para o código da cidade que já possuo na minha tabela "CIDADES"

essa é a estrutura das duas tabelas

TABELA CIDADE  
    campos  
    cod_cidade  |   cod_estado  |  cidade   |  
      
    Ex de registro:     
    1    |   1     |   Porto Alegre  |  
      
      
    TABELA IBGE  
    cod_ibge  |  cod_estado   |  cidade   |  ibge   |  
      
    ex de registro :   
    1   |   1   |   Porto Alegre   |   220000 |
eu entendo muito pouco de sql. Queria saber se tem alguma maneira de fazer um script via sql que... verifica o código do estado da cidade é igual ao da tabela IBGE E a cidade for o mesmo nome, alterar o registro DA TABELA ibge tirando o nome da cidade para o código da tabela cidade. com isso o registro na tabela IBGE ficaria assim
1   |   1   |   1   |   220000 |
são mais de 5mil registro fazer a mao vai ser complicado se compliquei me perguntem q eu tento exemplificar melhor agradeço a atenção!

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

É possível:

create table cidade (cod_cidade int, cod_estado int, cidade varchar(100));
create table ibge (cod_ibge int, cod_estado int, cidade varchar(100), ibge int);

insert into cidade (cod_cidade, cod_estado, cidade) values 
(1, 1, 'Porto Alegre'),
(2, 2, 'São Paulo');

insert into ibge (cod_ibge, cod_estado, cidade, ibge) values 
(1, 1, 'Porto Alegre', 220000),
(2, 2, 'são Paulo', 330000);

update ibge
set cidade = to_char(cidade.cod_cidade, 'FM99999999')
from cidade
where 
    ibge.cod_estado = cidade. cod_estado
    and
    ibge.cidade = cidade.cidade
;
UPDATE 1
cpn=> select * from ibge;
 cod_ibge | cod_estado |  cidade   |  ibge  
----------+------------+-----------+--------
        2 |          2 | são Paulo | 330000
        1 |          1 | 1         | 220000
(2 rows)
Mas não é uma boa idéia pois vai depender de os nomes das cidades nas duas tabelas terem as mesmas grafias e também de existirem todas as cidades da tabela ibge na tabela cidade. Assim, como no exemplo, acima vão ficar faltando cidades sem converter e vai virar uma confusão. As duas tabelas não são referenciáveis entre si e não existe solução automatizada para este problema. O menos ruim que você pode fazer é consultar fazendo a junção das tabelas assim:
select 
    c.cod_cidade, c.cod_estado, c.cidade,
    i.cod_ibge, i.cod_estado, i.cidade, i.ibge
from ibge i
left outer join cidade c on i.cod_estado = c.cod_estado and i.cidade = c.cidade
;
 cod_cidade | cod_estado |    cidade    | cod_ibge | cod_estado |    cidade    |  ibge  
------------+------------+--------------+----------+------------+--------------+--------
          1 |          1 | Porto Alegre |        1 |          1 | Porto Alegre | 220000
            |            |              |        2 |          2 | são Paulo    | 330000
(2 rows)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this