Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

postgreSQL update from one Table to another based on a ID match

I have a database with sites and counties. Every site is located in one county. In the sites table, the county is already mentioned but I want to replace it with the ID, which in is the other table.

My update code is as follows:

UPDATE sites
SET cgid = c.gid 
FROM (select c.gid as a from counties c
INNER JOIN sites s
ON c.name = s.county) p;

The table sites is updated, although every value in the cgid column is the same (the ID of the first county). What can I do to get the right values?

like image 901
Toik95 Avatar asked Nov 02 '16 11:11

Toik95


1 Answers

The target table of an update statement should never be repeated in the from clause

So I think you want this:

UPDATE sites s
  SET cgid = c.gid 
FROM counties c 
where c.name = s.county;

This assumes that counties.name and sites.county are both unique.

like image 84
a_horse_with_no_name Avatar answered Oct 05 '22 04:10

a_horse_with_no_name