根据 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 中的另一列上选择具有最大值的不同行