【问题标题】:Update column based on another column in Access根据 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;

感谢任何帮助。

【问题讨论】:

    标签: sql ms-access


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 2017-07-24
      相关资源
      最近更新 更多