Обновите поля в таблице MySQL, где совпадают поля в нескольких таблицах - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть четыре стола.Первый содержит список добровольцев , второй - список сайтов , а третий - список проектов .Строка проекта - это просто ссылка на добровольца и сайт с идентификатором и дополнительным столбцом с именем сектор .

Все три таблицы получены из четвертой таблицы с именем legacy .Мне нужно извлечь поле из каждой строки в устаревшей таблице в столбце с именем сектор и поместить его в столбец сектор для соответствующей строки в таблице проектов.

Чтобы узнать, у меня есть правильная строка в таблице legacy при обновлении таблицы projects , мне нужно сопоставить столбцы firstname и фамилия из добровольцев и столбцы имя , муниципалитет и провинция из сайтов с соответствующими имстолбцы в legacy .

Я думаю, что мой запрос должен выглядеть примерно так:

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)

Каким должен быть подзапрос?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012
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
0 голосов
/ 26 сентября 2011

Вы не хотите здесь подзапрос, вы хотите присоединиться.

Я бы написал это для вас, но вы не показываете свои таблицы, поэтому я не могу.

Но в первую очередь вам нужно написать SELECT со всеми таблицами, которые правильно соединяют все. Как только вы сделаете это, все, что вам нужно, это изменить его на UPDATE, и все готово.

...