У меня есть запрос на выборку, который выполняет некоторые манипуляции с текстом, чтобы по существу переформатировать поле, чтобы я мог найти его в другой таблице:
Если в моей первой таблице, если у меня есть поле типа "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, поэтому я не могу представить себе фактическую проблему с разрешениями, как кажется, что большинство проблем «Операция должна использовать обновляемый запрос».
РЕДАКТИРОВАТЬ: Попытка упростить случай, который не работает.
Этот запрос ОБНОВЛЕНИЯ в порядке:
UPDATE t1
SET t2ID="Unknown"
WHERE TN LIKE "J?/?"
AND DD LIKE "M*";
Этот сбой (Спасибо Гедке - этот пример, очевидно, дает сбой, потому что подзапрос возвращает более 1 результата. Я упростил попытку найти мою проблему)
UPDATE t1
SET t2ID=(SELECT ID FROM t2)
WHERE TN LIKE "J?/?"
AND DD LIKE "M*";
Так у меня какой-то неправильный синтаксис подзапроса?
РЕДАКТИРОВАТЬ: Этот оператор 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
Кроме того, использование счетчика в приведенном выше операторе выбора показывает, что для каждой комбинации (DD, TN) возвращается ровно 1 идентификатор
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 результатов)