0

是否有可能在更新语句中确定要更新哪些列是有条件的?

我正在尝试运行更新查询来更新每条记录的 30 列之一,但前提是记录中的前一个字段已经填写。基本上我有一个包含项目的表和一个包含捐赠者的表。每个项目有 1 到 4 个捐助者,但每个捐助者资助了 1 到 25 个项目。项目页面填满了捐助者,所以我试图用他们资助的项目自动填写捐助者。到目前为止,我的尝试如下。(我正在更新的查询是一个查询,当捐助者表中的捐助者等于项目表中的捐助者 1 或捐助者 2 或捐助者 3 或捐助者 4 时选择字段):

UPDATE [Appropriate Query] 
SET (iif([Project Funded 1 title] is null OR [project funded 1 title] <>   
[Project title], [project funded 1 title], iif([project funded 2 title]
is null OR [project funded 1 title] <> [Project title], [project funded 2 title])) 
= Iif([Project title] is null, [cc number], [project title]) 

(我有这个嵌套循环的第一个 SET 部分循环了 30 列。我的代码的第二部分是因为一些“项目标题”字段是空的,但我需要在该字段中添加一些标识符)

到目前为止,我只收到错误消息。如上图所示,是否有可能根据其内容来确定要更新哪些列?我知道 iif 语句很难看,但据我所知,JET SQL(访问语言)不允许 case 语句。

非常感谢,请原谅我的无知。

4

1 回答 1

0

您不能,除非使用 VBA 动态构建 SQL。

但是您不应该这样做(至少不应该在这里),而应该更正您的表格设计。

您在项目和捐助者之间有一个多对多的关系,因此您应该在它们之间有一个联结表,而不是基表中的多个列。

编辑

当然,通过一系列 INSERT 查询,例如,如果您填写了项目表:

INSERT INTO junction (project_id, donor_id) 
SELECT id, donor1 FROM project WHERE donor1 IS NOT NULL;

INSERT INTO junction (project_id, donor_id) 
SELECT id, donor2 FROM project WHERE donor2 IS NOT NULL;

等等

于 2016-04-18T21:23:28.927 回答