我有以下SQL语句,只需在我们的Sybase 15数据库中使用最新的软件包版本号更新#temp
临时表。使用子查询派生表错误进行更新
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
给我(主要是甲骨文& SQL Server体验超过的Sybase)有错小本声明。然而,Sybase抛出一个异常:
You cannot use a derived table in the FROM clause of an UPDATE or DELETE statement.
现在,我不明白这里的问题。我认为这是因为使用了聚合/ GROUP BY。当然,我可以把子查询放在一个临时表中并加入它,但我真的想知道'正确'的方法应该是什么以及到底是什么错误。
任何想法或指导将不胜感激。
这似乎是一个。谢谢。只需要做一些小小的调整:'更新t'到'UPDATE#temp'。令人沮丧的是,这样简单的事情必须以这种方式写出来! – markblandford 2012-08-09 13:58:45
我认为@valexhome提出了一个较短的版本。 – 2012-08-09 14:00:22