2015-01-30 3 views
0

У меня есть следующие 2 таблицы и я пытаюсь обновить поле внешнего ключа CategoryID в таблице подкатегорий. Одна категория может иметь несколько подкатегорий, поэтому отношения здесь от одного до многих.Запрос на обновление Microsoft Access 2010 - обновление поля внешнего ключа

Im пытается сделать это в критериях дизайна запроса view.The им пытаются использовать для обновления выглядит следующим образом:

Категория имена начинаются с упаковочным материалом число, например 106. Подкатегории для этой категории будут начинаться с тех же трех цифр, например, 106 картона, 106 пузырьков и т. Д.

Поскольку у меня есть длинный список подкатегорий, им пытаются использовать запрос на обновление, чтобы ввести идентификатор категории (Categories.ID) в столбец categoryID в таблице подкатегорий (подкатегории.CategoryID), где первые 3 цифры одинаковы.

Итак, в приведенном выше примере, если 106 упаковочных материалов имеют идентификатор 1 в таблице категорий, тогда 106 картонных и 106 пузырьков будут иметь «1» в своем поле категорииID.

Я знаю, что могу использовать Left (categoryname, 3) для извлечения чисел для сравнения, но не знаю, как построить оператор update для выполнения этого или для его размещения.

Таким образом, мой окончательный желаемый результат состоит в том, что все подкатегории имеют соответствующую запись категории. Некоторые больше категорий и связанных с подкатегорию примерами являются:

  • 101 канцтовары (ID 2) -> 101 ноутбуков, 101 ручки, 101 блокноты

  • 102 искусства и ремесла (ID 3) -> 102 краски , 102 щетки

ID признателен за помощь и им совсем новое для SQL и доступа.

благодаря

Tables and their relationship

UPDATE:

я попытался следующие SQL

UPDATE subCategories INNER JOIN categories ON subCategories.categoryID = categories.ID SET subCategories.CategoryID = [Categories].[ID] WHERE ((Left([Categories].[Category],3)=Left([Subcategories].[Subcategory],3)));

Вот тот же запрос в режиме конструктора:

query design

Но это результат возвращается:

Query result

ответ

0

Вы можете попробовать это:.

UPDATE категорий, подкатегорий SET subCategories.CategoryID = [категории] [ID] WHERE ((слева ([Категория] [Категория], 3) = Left ([подкатегория] [подкатегория], 3)..));

Для того, чтобы это правильно работало, вам необходимо убедиться, что три номера в категории уникальны. Если имеется несколько вхождений одного и того же номера, это обновление не будет работать должным образом.

+0

привет, я пробовал это, но продолжаю получать синтаксические ошибки? должен ли этот sql работать в базе данных доступа? коллега считает, что он похож на синтаксис SQL-сервера. извините, но я очень новичок во всем этом! – Nick

+0

Прошу прощения. Я отредактировал ответ для работы с доступом. – trailer

+0

спасибо, трейлер, это сработало! Извините за поздний ответ :) – Nick