У меня есть следующий оператор SQL, который просто обновляет временную таблицу #temp
с последним номером версии пакета в нашей базе данных Sybase 15.Обновление с ошибкой производной таблицы Sub Query
UPDATE t
SET versionId = l.latestVersion
FROM #temp t INNER JOIN (SELECT gp.packageId
, MAX(gp.versionId) latestVersion
FROM Group_Packages gp
WHERE gp.groupId IN (SELECT groupId
FROM User_Group
WHERE userXpId = 'someUser')
GROUP BY gp.packageId) l
ON t.packageId = l.packageId
мне (в основном Oracle & опыт SQL Server более чем Sybase) есть немного неправильно с этим утверждением. Однако Sybase выбрасывает исключение:
You cannot use a derived table in the FROM clause of an UPDATE or DELETE statement.
Теперь, я не понимаю, в чем проблема. Я предполагаю, что это связано с использованием агрегации/GROUP BY. Конечно, я мог бы поместить вспомогательный запрос в таблицу temp и присоединиться к нему, но я действительно хочу знать, что такое «правильный» метод и что, черт возьми, неправильно.
Любые идеи или рекомендации будут высоко оценены.
Это похоже. Спасибо. Просто нужно было сделать небольшую настройку: 'UPDATE t'' UPDATE # temp'. Разочарование того, что что-то настолько простое должно быть написано таким образом! – markblandford
Я думаю, что @valexhome придумал более короткую версию. –