У меня есть следующие данные:Как я могу обновить таблицу данными, полученными с помощью соединения?
SectorKey Sector foo
1 A null
2 B null
... ... ...
1 null a
2 null b
2 null c
1 null d
2 null e
... ... ...
Я хочу обновить Sector колонки, когда он нулевой на основе стоимости sectorKey, то есть я хочу Sector быть «A», когда SectorKey является 1 и «B», когда SectorKey является 2
Я попробовал этот запрос:
update tbFoo
set Sector=A.sector
from tbFoo A INNER JOIN tbFoo B
ON A.SectorKey=B.SectorKey
and A.Sector is not null
and B.Sector is null
и получил сообщение об ошибке:
Таблица 'tbFoo' неоднозначна.
Я пытался использовать псевдоним первого tbFoo, но, похоже, он не является допустимым синтаксисом. Я не понимаю, почему SQLServer жалуется на неоднозначное именование, поскольку у меня есть все мои псевдонимы.
Я нашел this thread, и я чувствую, что делаю то же самое, что и в ответном ответе. Я также попытался запрос, предложенный в принятом ответе:
update tbFoo A
set Sector =
(select Sector from tbFoo
where A.SectorKey=SectorKey and Sector is not null)
, а затем SQLServer жалуется на неправильный синтаксис около «A»
Любые идеи о том, что может происходить, и это исправить? Я использую SQLServer 2008.
EDIT Я не показал общие данные таблицы. У меня не только два случая (A и B), но несколько тысяч случаев. Так явный случай не вариант
@Joel. Именно то, что мне не хватало. thanks :) – Brann
Кажется, я не могу пройти мимо позиции вашего ОТ, он всегда вызывает там ошибку, есть ли режим mysql, который не принимает FROM после набора? – Gisheri
@ Gisheri Вы используете MySql. Этот вопрос отмечен для Sql Server. Синтаксис для MySql и Sql Server отличается в этой области. MySql не соответствует стандарту ansi. –