Question

I have four tables. The first contains a list of volunteers, the second a list of sites, and the third a list of projects. A project row is simply a reference to a volunteer and a site with an id and an additional column called sector.

All three tables are derived from a fourth table called legacy. I need to pull a field from each row in the legacy table in the column called sector and place it in the sector column for a corresponding row in the projects table.

In order to know I have the correct row in the legacy table when updating the projects table, I need to match the columns firstname and lastname from volunteers and the columns name, municipality, and province from sites with their corresponding columns in legacy.

I think my query should look something like this:

UPDATE projects, legacy
  SET
    projects.sector = legacy.sector,    
  WHERE (SUBQUERY CONTAINING COMPARISONS OF OTHER FEILDS IN OTHER TABLES SUCH AS
         volunteers.firstname = legacy.firstname
         volunteers.lastname = legacy.lasttname
         sites.province= legacy.province
         sites.municipality= legacy.municipality
         sites.name= legacy.name)

What should the subquery be?

Was it helpful?

Solution

You don't want a subquery here, you want a join.

I would write it for you but you don't show your tables so I can't.

But basically the first thing you need to do is write a SELECT with all the tables that properly connects everything. Once you do that all you need is change it to an UPDATE and you are done.

OTHER TIPS

UPDATE projects
  SET sector = legacy.sector
FROM legacy
INNER JOIN sites ON sites.province = legacy.province AND/OR
         sites.municipality = legacy.municipality AND/OR
         sites.name = legacy.name
INNER JOIN volunteers ON volunteers.firstname = legacy.firstname AND/OR
         volunteers.lastname = legacy.lasttname
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top