Вам необходимо отделить таблицу, которую вы хотите обновить, от таблицы, которую вы запрашиваете, даже если она такая же:
UPDATE t1
SET t1.age = t2.age
FROM t1 as tempT1
INNER JOIN t2
ON tempT1.name = t2.name
WHERE tempT1.name IS NOT NULL;
UPDATE
Очевидно, MySQL использует другой синтаксис UPDATE JOIN
, чем другие базы данных. Ваш первоначальный запрос, похоже, использует правильный синтаксис, просто для того, чтобы убедиться, что вы пытаетесь создать псевдоним имен таблиц:
UPDATE t1 temp1
INNER JOIN t2 temp2
ON temp1.name = temp2.name
SET temp1.age = temp2.age
WHERE temp1.name IS NOT NULL;
ОБНОВЛЕНИЕ 2
Посмотрев немного дольше, я уверен, что проблема заключается в предложении WHERE
:
WHERE temp1.name IS NOT NULL
В любом случае вы не можете объединять нулевые значения, поэтому они отфильтрованы по умолчанию. Предложение WHERE
как-то мешает соединению.
Попробуйте и удалите его, чтобы увидеть, работает ли UPDATE
. Если вы не хотите выполнять и обновлять сразу, просто выполните выбор с тем же JOIN CLAUSE
, чтобы увидеть, какие записи будут затронуты.
Вот общая ссылка на NULL
и JOIN
:
http://databases.about.com/library/weekly/aa051203a.htm
Вот справочник по SQL Server в соответствии с приведенным выше: http://msdn.microsoft.com/en-us/library/ms190409.aspx
Не удалось найти ссылку на MySQL, в которой это явно указано, но я думаю, что это верно для всех реляционных БД.