我想使用MS Access SQL更新tblBillingPlan
具有ID主键的表。我想db_FeeType
用我按查询分组计算的值来更新该字段。
FROM子句引用qryGIT,它返回两列ID和FeeType。每个ID仅返回一行。
UPDATE tblBillingPlan
SET tblBillingPlan.db_FeeType =
( SELECT MAX(GI.FeeType)
FROM qryGIT AS GI
WHERE GI.id=tblBillingPlan.ID
GROUP BY GI.ID
);
当我运行时,出现错误“查询不可更新”。我该如何解决?
我最初尝试:
UPDATE tblBillingPlan
SET tblBillingPlan.db_FeeType =
( SELECT GI.FeeType
FROM qryGIT AS GI
WHERE GI.id=tblBillingPlan.ID
);
这是...的定义 qryGIT
SELECT Billing_plan.id
, Billing_plan.name
, IIf(Max([Fee]) Is Null Or Max([Fee])=Min([Fee])
,Max([Fee])
,"BP has BP Fee rows with different fee types") AS FeeType
FROM Billing_plan
LEFT JOIN Billing_plan_fee
ON Billing_plan.id = Billing_plan_fee.billing_plan_id
GROUP BY Billing_plan.id, Billing_plan.name;
请注意,Billing_plan_fee
最多将有四行与给定的Billing_plan.id相匹配。
我还尝试使用TOP修饰符仅返回一行,这没有什么区别
UPDATE tblBillingPlanCPLAD
SET tblBillingPlanCPLAD.FeeType =
( SELECT TOP 1 GI.FeeType -- TOP 1 made no differentce
FROM GITAS GI
WHERE GI.id=tblBillingPlan.ID
);
我将使用DAO记录集来执行此操作,但是我确定我曾经写过可以在Oracle和SQL Server中执行此操作的SQL。我很生锈
当Access抱怨不可更新时,Access Domain Aggregate函数可以提供帮助UPDATE
。在这种情况下,请使用DMax
:
UPDATE tblBillingPlan AS bp
SET bp.db_FeeType =
DMax(
'FeeType',
'qryGIT',
'id=' & bp.ID
);
但是,它DMax
是特定于Access的,因此在Oracle或SQL Server中将无法使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句