Postgresql

將表中的 id 分配給 PostgreSQL 中另一個表的記錄

  • March 13, 2022

datosPostgreSQL 數據庫中的一個表開始,該表包含 9+ M 西班牙鳥類存在的數據,我創建了一個新表,使用該表從該表中提取所有不同的位置

create table localidades as 
select distinct locality, stateProvince, decimalLatitude, decimalLongitude
from datos;

之後,我為它創建了一個 id 列

ALTER TABLE localidades ADD COLUMN id SERIAL PRIMARY KEY;

我還為所有這些欄位創建了索引

CREATE INDEX idx_lugar ON datos (locality);
create index idx_prov on datos(stateprovince);
create index idx_lat on datos(decimalLatitude);
create index idx_lon on datos(decimalLongitude);
create index idx_lat1 on localidades(decimalLatitude);
create index idx_lon1 on localidades(decimalLongitude);
CREATE INDEX idx_lugar1 ON localidades (locality);
create index idx_prov1 on localidades(stateprovince);

現在我想將相應的localidadesid 分配給datos. 我嘗試了以下程式碼但沒有成功(它無休止地執行)

update datos set cod_loc = l.id 
from datos d, localidades l
where l.locality = d.locality 
   and l.stateprovince = d.stateprovince 
   and l.decimalLatitude=d.decimalLatitude 
   and l.decimalLongitude=d.decimalLongitude;

應該怎麼做?

datos您通過指定兩次無意中創建了交叉聯接。嘗試

UPDATE datos AS d SET cod_loc = l.id 
FROM localidades AS l
WHERE l.locality = d.locality 
 AND l.stateprovince = d.stateprovince 
 AND l.decimalLatitude = d.decimalLatitude 
 AND l.decimalLongitude = d.decimalLongitude;

引用自:https://dba.stackexchange.com/questions/308675