Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新MySQL表中匹配多个表中字段的字段_Mysql_Sql_Database_Sql Update_Nested Queries - Fatal编程技术网

更新MySQL表中匹配多个表中字段的字段

更新MySQL表中匹配多个表中字段的字段,mysql,sql,database,sql-update,nested-queries,Mysql,Sql,Database,Sql Update,Nested Queries,我有四张桌子。第一个是志愿者列表,第二个是网站列表,第三个是项目列表。项目行只是对志愿者和站点的引用,其中包含id和一个名为sector的附加列 这三个表都是从第四个名为legacy的表派生而来的。我需要从名为sector的列中的遗留表的每一行中提取一个字段,并将其放置在projects表中相应行的sector列中 更新项目表时,为了知道我在遗留表中有正确的行,我需要匹配志愿者中的列firstname和lastname以及列名称、市政当局、,以及站点中的省,其相应列位于遗留中 我认为我的查询应该

我有四张桌子。第一个是志愿者列表,第二个是网站列表,第三个是项目列表。项目行只是对志愿者和站点的引用,其中包含id和一个名为sector的附加列

这三个表都是从第四个名为legacy的表派生而来的。我需要从名为sector的列中的遗留表的每一行中提取一个字段,并将其放置在projects表中相应行的sector列中

更新项目表时,为了知道我在遗留表中有正确的行,我需要匹配志愿者中的列firstname和lastname以及列名称、市政当局、,以及站点中的省,其相应列位于遗留

我认为我的查询应该是这样的:

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)

子查询应该是什么?

这里不需要子查询,而是需要联接

我会为你写的,但你不展示你的桌子,所以我不能

但基本上,您需要做的第一件事是编写一个
SELECT
,其中包含所有正确连接所有内容的表。一旦你这样做了,你所需要的就是把它改成一个
更新
,你就完成了

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