MS Access UPDATE 查询失败,因为查询不可更新
MS Access UPDATE query fails as query is not updateble
我想使用 MS Access SQL 更新一个 table tblBillingPlan
作为主键 ID。我想用我在一组查询中计算的值更新字段 db_FeeType
。
FROM 子句引用了 qryGIT,其中 return 有两列 ID 和 FeeType。每个 ID 只有一行 returned。
UPDATE tblBillingPlan
SET tblBillingPlan.db_FeeType =
( SELECT MAX(GI.FeeType)
FROM qryGIT AS GI
WHERE GI.id=tblBillingPlan.ID
GROUP BY GI.ID
);
当我 运行 我得到错误 "query is not updatable"。我该如何解决这个问题?
我最初尝试过:
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 修饰符仅 return 一行,但没有任何区别
UPDATE tblBillingPlanCPLAD
SET tblBillingPlanCPLAD.FeeType =
( SELECT TOP 1 GI.FeeType -- TOP 1 made no differentce
FROM GITAS GI
WHERE GI.id=tblBillingPlan.ID
);
我打算使用 DAO 记录集来执行此操作,但我确信我曾经编写过 SQL 可以在 Oracle 和 SQL 服务器中执行此操作。我生疏了。
Access Domain Aggregate 函数可以在 Access 抱怨 UPDATE
不可更新时提供帮助。在这种情况下,使用 DMax
:
UPDATE tblBillingPlan AS bp
SET bp.db_FeeType =
DMax(
'FeeType',
'qryGIT',
'id=' & bp.ID
);
但是,DMax
是特定于 Access 的,因此在 Oracle 或 SQL Server 中不起作用。
我想使用 MS Access SQL 更新一个 table tblBillingPlan
作为主键 ID。我想用我在一组查询中计算的值更新字段 db_FeeType
。
FROM 子句引用了 qryGIT,其中 return 有两列 ID 和 FeeType。每个 ID 只有一行 returned。
UPDATE tblBillingPlan
SET tblBillingPlan.db_FeeType =
( SELECT MAX(GI.FeeType)
FROM qryGIT AS GI
WHERE GI.id=tblBillingPlan.ID
GROUP BY GI.ID
);
当我 运行 我得到错误 "query is not updatable"。我该如何解决这个问题?
我最初尝试过:
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 修饰符仅 return 一行,但没有任何区别
UPDATE tblBillingPlanCPLAD
SET tblBillingPlanCPLAD.FeeType =
( SELECT TOP 1 GI.FeeType -- TOP 1 made no differentce
FROM GITAS GI
WHERE GI.id=tblBillingPlan.ID
);
我打算使用 DAO 记录集来执行此操作,但我确信我曾经编写过 SQL 可以在 Oracle 和 SQL 服务器中执行此操作。我生疏了。
Access Domain Aggregate 函数可以在 Access 抱怨 UPDATE
不可更新时提供帮助。在这种情况下,使用 DMax
:
UPDATE tblBillingPlan AS bp
SET bp.db_FeeType =
DMax(
'FeeType',
'qryGIT',
'id=' & bp.ID
);
但是,DMax
是特定于 Access 的,因此在 Oracle 或 SQL Server 中不起作用。