Update campo com valor de outra tabela - oracle

Senhores,
Gostaria de uma ajuda.

#update no campo com valor de outra tabela

SELECT  CD_MUNICIPIO_IBGE FROM pessoa_fisica WHERE CD_MUNICIPIO_IBGE is null

SELECT  CD_MUNICIPIO_IBGE FROM compl_pessoa_fisica

UPDATE pessoa_fisica SET CD_MUNICIPIO_IBGE = CD_MUNICIPIO_IBGE 

Preciso que na tabela pessoa_fisica o codigo CD_MUNICIPIO_IBGE seja igual ao código CD_MUNICIPIO_IBGE da tabela compl_pessoa_fisica

Não sou nenhum ninja em SQL, mas acho que algo assim funciona:

UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
	SELECT cpf.cd_municipio_ibge
	FROM compl_pessoa_fisica cpf
	WHERE cpf.cod_pessoa_fisica = :cod
)
WHERE pf.cod = :cod

Repare que as condições dos WHERE's são a mesma.

Bom dia!
Obrigado, mas não está dando certo.

UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
	SELECT cpf.cd_municipio_ibge
	FROM compl_pessoa_fisica cpf
	WHERE cpf.cd_pessoa_fisica = pf.cd_municipio_ibge AND cpf.ie_tipo_complemento = 1
)
WHERE cpf.cd_pessoa_fisica = pf.cd_pessoa_fisica

Na verdade eu não tenho um código, apenas vou copiar o cd_municipio_ibge de uma tabela para outra, são códigos iguais.

Essa parte não pode ser assim. Tenta assim:

UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
	SELECT cpf.cd_municipio_ibge
	FROM compl_pessoa_fisica cpf
	WHERE cpf.cd_pessoa_fisica = pf.cd_municipio_ibge 
)
WHERE pf.cd_pessoa_fisica = :codPessoaFisica

Eu tinha errado mesmo, ajustei no texto acima.

Seu script ele pede para eu informar o código (:codPessoaFisica), porém eu vou copiar na verdade, são mais de 10000 mil códigos, então apenas quero copiar de um e colar no outro.

UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE cpf.cd_pessoa_fisica = pf.cd_municipio_ibge
)
WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica

Erro a partir da linha : 3 no comando -
UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
SELECT cpf.cd_municipio_ibge
FROM compl_pessoa_fisica cpf
WHERE cpf.cd_pessoa_fisica = pf.cd_municipio_ibge
)
WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica
Erro na Linha de Comandos : 9 Coluna : 29
Relatório de erros -
Erro de SQL: ORA-00904: “CPF”.“CD_PESSOA_FISICA”: identificador inválido
00904. 00000 - “%s: invalid identifier”
*Cause:
*Action:

Cara, na verdade eu estava moscando. No seu caso, tem como fazer um UPDATE FROM SELECT:

UPDATE
    pessoa_fisica pf
SET
	pf.cd_municipio_ibge = cpf.cd_municipio_ibge
FROM
    compl_pessoa_fisica cpf
WHERE
    pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica

EDIT

Dei uma pesquisada e parece que o oracle não entende essa sintaxe. Vc pode tentar assim:

UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
	SELECT cpf.cd_municipio_ibge
	FROM compl_pessoa_fisica cpf
	WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica AND cpf.ie_tipo_complemento = 1 
);

Consegui :slight_smile:

UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
	SELECT cpf.cd_municipio_ibge
	FROM compl_pessoa_fisica cpf
	WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica AND ie_tipo_complemento = 1 
)
WHERE pf.cd_pessoa_fisica = 28027
AND 
pf.CD_MUNICIPIO_IBGE is null

Coloquei apenas um paciente como exemplo,

)
WHERE pf.cd_pessoa_fisica = cd_pessoa_fisica
AND 
pf.CD_MUNICIPIO_IBGE is null
1 curtida

Antes da sua resposta, eu tinha editado minha resposta com uma forma que executa para todos os registros. Veja se funciona.

Cara,
Da forma que mandou ajudou bastante, só fiz algumas alteraçòes e funcionou perfeitamente.

UPDATE pessoa_fisica pf
SET pf.cd_municipio_ibge = (
	SELECT cpf.cd_municipio_ibge
	FROM compl_pessoa_fisica cpf
	WHERE pf.cd_pessoa_fisica = cpf.cd_pessoa_fisica AND ie_tipo_complemento = 1 
)
WHERE pf.cd_pessoa_fisica = cd_pessoa_fisica
AND pf.CD_MUNICIPIO_IBGE is null
1 curtida