根据 Access 中的另一列更新列

Posted

技术标签:

【中文标题】根据 Access 中的另一列更新列【英文标题】:Update column based on another column in Access 【发布时间】:2017-01-12 10:24:09 【问题描述】:

我有这个问题:

SELECT ID, T2.code1, T2.code2, T2.mins
FROM Table AS T1, (
SELECT code1, code2, MIN(ID) AS mins
FROM Table GROUP BY code1, code2 HAVING count(*)>1
)  AS T2
WHERE T1.code1=T2.code1 And T1.code2=T2.code2;

我在哪里根据 code1 和 code2 获取所有重复的行,并获取重复行的最小 ID。

现在我要做的是更新表以将重复行的 ID 设置为最小值

我试过了,但访问时出错:(操作必须使用可更新的查询)

Update (
SELECT ID, T2.code1, T2.code2, T2.mins
FROM Table AS T1, (
SELECT code1, code2, MIN(ID) AS mins
FROM Table GROUP BY code1, code2 HAVING count(*)>1
)  AS T2
WHERE T1.code1=T2.code1 And T1.code2=T2.code2
) Set ID=T2.mins;

感谢任何帮助。

【问题讨论】:

【参考方案1】:

考虑通过使用聚合块的 Make-Table 操作查询来使用临时表,然后加入 UPDATE。 Access SQL 需要更新查询以保留updateable (or non read-only) 条件,这通常意味着直接表和简单连接查询或您可以在其数据表视图中编辑/添加/删除的任何表/查询。 GROUP BY 的聚合查询永远不可更新。

制作表查询

SELECT code1, code2, MIN(ID) AS mins 
INTO Temp
FROM Table 
GROUP BY code1, code2 
HAVING COUNT(*)>1;

更新查询

UPDATE Table t1 INNER JOIN Temp t2
ON t1.code1 = t2.code1 AND t1.code2 = t2.code2
SET t1.Col = t2.Mins;

或者,尝试使用DMax()DMin()DCount() 等域聚合。下面假设 code 字段是数字类型:

UPDATE Table t1
SET t1.Col = DMin("ID", "Table", "code1=" & t1.code1 & " AND code2=" & t1.code2)
WHERE DCount("ID", "Table", "code1=" & t1.code1 & " AND code2=" & t1.code2) > 1

【讨论】:

以上是关于根据 Access 中的另一列更新列的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access 2016 中的另一列上选择具有最大值的不同行

根据另一列的另一个值和/或另一行中的同一列更新设置值:-ORA 1427

根据MySQL中另一列分组的另一列的顺序更新列

如何根据 mySQL 中的另一列选择一列?

SQL 从另一个表中的另一列更新一列

如何根据python中的另一列自动添加日期?