Мне нужно обновить поле (которое в настоящее время пусто) на основе совпадения с другой таблицей. Это должно быть просто, но мой синтаксис неверен.
В SQLServer 2005 синтаксис будет следующим:
UPDATE Facilities-NOID
SET Facilities-NOID.ID = Facilities-ID.ID
FROM Facilities-NOID, Facilities-ID
WHERE [Facilities-ID].[Structure ID] = [Facilities-NOID].[Structure ID];
Доступу не нравится эта строка FROM, но если я ее оставлю, ему понадобится каждый идентификатор. Это должно быть просто, но я не вижу этого в справке MS по синтаксису обновления.





Полностью удалите предложение FROM
UPDATE Facilities-NOID
SET Facilities-NOID.ID = Facilities-ID.ID
WHERE [Facilities-ID].[Structure ID] = [Facilities-NOID].[Structure ID];
(именно так их конструирует построитель запросов)
Вы пробовали заключать имена таблиц в квадратные скобки, как в [ID-объекта] .ID? Я не могу вспомнить, какие символы Access / Jet не нравятся в именах, но, может быть, - (в отличие от подчеркивания _) обрабатывается так же, как пробел? Я всегда использую CamelCase, поэтому скобки мне не нужны.
Думаю, это то, что вам нужно:
UPDATE Facilities-NOID
INNER JOIN Facilities-ID ON Facilities-NOID.[Structure ID]
= Facilities-ID.[Structure ID]
SET Facilities-NOID.ID= Facilities-ID.ID
Вы обновляете объект-NOID на основе совпадения идентификатора структуры, указанного в идентификаторе объекта.
Теперь он запрашивает ввод Facility-ID.StructureID (без пробела!). Нужен ли мне какой-то выбор * из идентификатора оборудования?
Оптимизатор запросов Jet оптимизирует явное JOIN и неявное соединение с использованием предложения WHERE точно так же, поэтому не должно быть никакой разницы между тем, используете ли вы предложение WHERE или INNER JOIN.
Когда я запускаю запрос, он запрашивает значение параметра. Ему нужны Facility-ID.ID. Я хочу, чтобы он обновил всю таблицу значениями из другой таблицы.