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