gpt4 book ai didi

sql - 使用子查询派生表错误进行更新

转载 作者:行者123 更新时间:2023-12-02 19:47:28 24 4
gpt4 key购买 nike

我使用以下 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

对我来说(主要是Oracle和SQL Server的经验比Sybase多)这个说法没有什么错误。然而,Sybase 抛出异常:

You cannot use a derived table in the FROM clause of an UPDATE or DELETE statement.

现在,我不明白问题出在哪里。我认为这是因为使用了聚合/GROUP BY。当然,我可以将子查询放在临时表中并加入它,但我真的想知道“正确”的方法应该是什么以及到底出了什么问题。

任何想法或指导将不胜感激。

最佳答案

SYBASE 似乎不支持 UPDATE FROM 类中的嵌套查询。 Similar problem

尝试使用这个:

UPDATE #temp
SET versionId = (SELECT MAX(gp.versionId) latestVersion
FROM Group_Packages gp
WHERE gp.packageId=#temp.packageId
and
gp.groupId IN (SELECT groupId
FROM User_Group
WHERE userXpId = 'someUser')

)

如果 l.latestVersion 为 NULL 怎么办?您想用 null 更新 #temp 吗?如果没有,则添加 WHERE:

    WHERE (SELECT MAX(gp.versionId)
....
) is not null

关于sql - 使用子查询派生表错误进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11880911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com