Доступ к SQL Update одной таблицы в соединении на основе значения в той же таблице
У меня есть таблица в Access называетсяtempSpring_ASN»со следующими полями (среди прочих):
SHP_CUSTOM_5 (AutoNumber)
RECORD_TYPE (текст)
PO_NUM (текст).
Мне нужно изменить значение RECORD_TYPE, так что если PO_NUM совпадает с PO_NUM в предыдущей записи, то RECORD_TYPE должно быть "LIN»иначе (или если этопервая запись), RECORD_TYPE должен быть "HDR».I»
мы создали следующий запрос, чтобы получить правильное новое значение для RECORD_TYPE: I '
SELECT TOP 1 t1.SHP_CUSTOM_5,
t1.PO_NUM AS CurrentValue,
NULL AS PreviousValue,
"HDR" AS RECORD_TYPE
FROM tempSpring_ASN AS t1
ORDER BY t1.SHP_CUSTOM_5
UNION ALL
SELECT t1.SHP_CUSTOM_5,
t1.PO_NUM AS CurrentValue,
t2.PO_NUM AS PreviousValue,
IIf([CurrentValue]=[PreviousValue],'LIN','HDR') AS RECORD_TYPE
FROM tempSpring_ASN AS t1,
tempSpring_ASN AS t2
WHERE t1.SHP_CUSTOM_5 = t2.SHP_CUSTOM_5 + 1
ORDER BY t1.SHP_CUSTOM_5;
мы сохранили этот запрос как "tempSpring_ASN_With_PreviousRow», Сейчас я'Я пытаюсь использовать это для обновления исходной таблицы tempSpring_ASN следующим запросом:
UPDATE tempSpring_ASN INNER JOIN tempSpring_ASN_With_PreviousRow ON tempSpring_ASN.SHP_CUSTOM_5 = tempSpring_ASN_With_PreviousRow.SHP_CUSTOM_5 SET tempSpring_ASN.RECORD_TYPE = [tempSpring_ASN_With_PreviousRow].[RECORD_TYPE];
но я'Я получаю "Операция должна использовать обновляемый запрос. «Я»я не уверен, если этопотому что япытаюсь обновить одну таблицу в соединении, или потому чтоЯ пытаюсь обновить таблицу на основе значения в той же таблице, или из-за чего-то еще. Независимо от того, яищу то, что работает.
Спасибо!
Обновить (не каламбур): я
мы пробовали следующий запрос на обновление:
UPDATE tempSpring_ASN INNER JOIN Table5 ON tempSpring_ASN.SHP_CUSTOM_5 = Table5.SHP_CUSTOM_5 SET tempSpring_ASN.RECORD_TYPE = "zzz";
и это работало нормально. Результатом было то, что tempSpring_ASN был обновлен, но Table5 не былт. Очевидно, что если две таблицы объединены в операторе SQL, даже если вы запустили обновление для одной таблицы, оно все равно победит 'Попытайтесь обновить другую таблицу в соединении. В таком случае яя не уверен, почему мой оригинальный запрос на обновление выигралт работа. Я знаю, что tempSpring_ASN_With_PreviousRow isn 'T обновляется, потому что этозапрос UNION, но яя непытаясь обновить его. Скорее яя пытаюсь обновить tempSpring_ASN - другую таблицу в соединении, котораяявляется обновляемый.
Обновление 2: Затем я попытался использовать коррелированный подзапрос следующим образом:
UPDATE tempSpring_ASN AS t
SET t.RECORD_TYPE = (
SELECT RECORD_TYPE
FROM (
SELECT TOP 1 t1.SHP_CUSTOM_5,
t1.PO_NUM AS CurrentValue,
NULL AS PreviousValue,
"HDR" AS RECORD_TYPE
FROM tempSpring_ASN AS t1
ORDER BY t1.SHP_CUSTOM_5
UNION ALL
SELECT t1.SHP_CUSTOM_5,
t1.PO_NUM AS CurrentValue,
t2.PO_NUM AS PreviousValue,
IIf([CurrentValue] = [PreviousValue], 'LIN', 'HDR') AS RECORD_TYPE
FROM tempSpring_ASN AS t1,
tempSpring_ASN AS t2
WHERE t1.SHP_CUSTOM_5 = t2.SHP_CUSTOM_5 + 1
ORDER BY t1.SHP_CUSTOM_5
)
WHERE SHP_CUSTOM_5 = t.SHP_CUSTOM_5
);
но я'я все еще получаюОперация должна использовать обновляемый запрос. "
Обновление 3:
Я считаю, что ошибка связана с тем, что ям с помощью запроса объединения. Чтобы изолировать проблему, ямы попробовали следующее (что НЕ дало бы желаемого результата, но помогло бы диагностировать проблему):
UPDATE tempSpring_ASN AS t
SET t.RECORD_TYPE = (
SELECT TOP 1 RECORD_TYPE
FROM tempSpring_ASN_With_PreviousRow
);
Это дало мне ту же ошибку. Теперь возникает вопрос: почемуt Я использую одно значение вывода запроса объединения, чтобы установить значение в наборе записей?