次のSQLステートメントを使用して、#temp
Sybase15データベースの最新のパッケージバージョン番号で一時テーブルを更新します。
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.
今、私はここで何が問題なのかわかりません。これは、aggregation /GROUPBYが使用されているためだと思います。もちろん、サブクエリを一時テーブルに入れて結合することもできますが、「正しい」メソッドがどうあるべきか、そして何が間違っているのかを本当に知りたいのです。
任意のアイデアやガイダンスをいただければ幸いです。