У меня есть запрос select, который обрабатывает некоторые текстовые манипуляции, чтобы существенно переформатировать поле, чтобы я мог посмотреть его в другой таблице:
Если моя первая таблица, если у меня есть поле типа "J1/2", оно ищет идентификатор записи в другой таблице с J1 и J2 в соответствующих полях.
Все это хорошо работает.
Теперь я хочу обновить исходную таблицу, поэтому мне больше не нужно выполнять поиск с помощью этой обработки строк, но мои попытки запросов на обновления заканчиваются на "Операция должна использовать обновляемый запрос"
Любые идеи?
Оператор SELECT:
SELECT DISTINCT
t1.DD,
t1.TN,
t1.DD & " J" & MID(t1.TN,2,1) AS CalculatedStart,
t1.DD & " J" & MID(t1.TN,4,1) AS CalculatedEnd,
t2.ID
FROM t1 INNER JOIN t2
ON (t1.DD & " J" & MID(t1.TN,2,1)=t2.StartLink)
AND (t1.DD & " J" & MID(t1.TN,4,1)=t2.EndLink)
WHERE t1.TN Like "J?/?"
AND t1.DD Like "M*";
Вспомните - это отлично работает, и я получаю необходимый t2.ID с другого конца.
Итак, я хочу сделать что-то вроде:
UPDATE t1 SET t2ID = (
SELECT Query1.ID
FROM Query1
WHERE t1.DD=Query1.DD
AND t1.TN=Query1.TN
)
WHERE t1.TN Like "J?/?"
AND t1.DD Like "M*";
Только это не удается. Это находится в самом MS Access, поэтому я не могу представить себе фактическую проблему с разрешениями, как, например, большинство проблем "Операция должна использовать обновляемый запрос".
EDIT: попытка упростить случай, который не работает.
Этот запрос UPDATE прекрасен:
UPDATE t1
SET t2ID="Unknown"
WHERE TN LIKE "J?/?"
AND DD LIKE "M*";
Это не удается (спасибо Goedke - этот пример явно терпит неудачу, потому что подзапрос возвращает более 1 результат. Я пытался упростить задачу)
UPDATE t1
SET t2ID=(SELECT ID FROM t2)
WHERE TN LIKE "J?/?"
AND DD LIKE "M*";
Так что я просто неправильно интерпретирую синтаксис подзапроса?
EDIT: этот оператор SELECT тоже хорош:
SELECT t1.OA, t1.DD, t1.TN, t1.HATRIS,
query1.DD, query1.TN, query1.ID
FROM t1 INNER JOIN query1
ON t1.DD=query1.DD
AND t1.TN=query1.TN
Кроме того, используя счетчик вышеприведенного оператора select, показано, что в каждой (DD, TN) комбинации есть ровно 1 ID
EDIT:
Простейший случай, который я теперь получил - используя различные инструкции SELECT, теперь у меня есть таблица с двумя столбцами - первичный ключ t1 и значение, которое я хочу вставить в t1.
Я все еще не могу написать
UPDATE t1 SET t1.f2 = (SELECT t2.f2 FROM t2 WHERE t2.f1 = t1.f1)
где первичный ключ t1 - f1. Даже добавление WHERE t1.f1 IN (SELECT f1 FROM t2) не помогает. (Добавлено, чтобы исключить возможность того, что подзапрос возвращает 0 результатов)