使用查询操作中的数据更新表必须使用可更新的查询

时间:2014-01-07 02:27:57

标签: sql

想知道是否有人可以帮我解决这个问题。我有一个表和一个查询,它们都具有相同的[资源ID],[资源名称]字段。我正在尝试使用查询的[CBL_x_Date]和[CBL_x_kW]字段更新表中的[CBL_1_Date]和[CBL_1_kW]字段。问题是当我尝试运行查询时,我不断收到“操作必须使用可更新的查询”错误。

UPDATE tCBLAggregation 
INNER JOIN qBestof4CBLs_avg 
ON (tCBLAggregation.[Event Date] = qBestof4CBLs_avg.[Event Start Date]) 
      AND 
      (tCBLAggregation.[Resource ID] = qBestof4CBLs_avg.[Resource ID]) 
SET tCBLAggregation.CBL_1_Date = [qBestof4CBLs_avg].[CBL_x_Date], tCBLAggregation.CBL_1_kW = [qBestof4CBLs_avg].[AvgOfCBL_x_kW];

1 个答案:

答案 0 :(得分:0)

如果您对qBestof4CBLs_avg使用子查询,那么您不会尝试更新不可更新的表表达式。

在ANSI SQL中(例如:PostgreSQL / SQL Server):

UPDATE "tCBLAggregation" 
   SET "CBL_1_Date" = v.d, 
       "CBL_1_kW"   = v.x
  FROM (
          SELECT "Event Start Date" as esd, 
                 "Resource ID"      as rid,
                 "CBL_x_Date"       as d, 
                 "AvgOfCBL_x_kW"    as x
          FROM   "qBestof4CBLs_avg"
       ) v 
 WHERE "Event Date"  = v.esd
   AND "Resource ID" = v.rid;

在任何合理的ANSI SQL兼容数据库中应该非常相似。

在反思中,UPDATE ... INNER JOIN看起来可能是MySQL(不太合规)。

请参阅@ this SO question中@Eric的答案,了解其他数据库的翻译。

编辑:在子查询中删除了令人困惑的x表别名。