【问题标题】:ADO SQL update table with result of group by queryADO SQL 使用 group by 查询的结果更新表
【发布时间】:2010-05-12 01:29:05
【问题描述】:

我正在尝试使用包含相同值的记录数更新 .mdb 表中的记录。

下面的 SQL 不起作用,但我认为可以说明我正在努力实现的目标。

UPDATE table1 AS A
INNER JOIN (SELECT PH_BSP , Count(PH_BSP) AS PHCOUNT  FROM table1 GROUP BY PH_BSP)  AS B
ON A.PH_BSP=B.PH_BSP
SET A.PH_SORT = B.PHCOUNT;

有什么想法吗?

【问题讨论】:

    标签: sql ms-access group-by ado sql-update


    【解决方案1】:

    如果你是在 Access 中这样做,你需要使用域聚合函数:

    UPDATE table1 
    SET PH_SORT = DCount("PH_BSP","Table1","PH_BSP='" & PH_BSP & "'")
    

    以上假设 PH_BSP 是一个文本字段,如果是数字则去掉单引号。

    【讨论】:

    • 感谢您的信息。如果域聚合函数是对访问表执行此操作的唯一方法,那么我认为它返回到“分组依据”到临时表中并加入原始表。我每天要处理数十万条记录(在许多数据库中),而 DCount 太慢了(就像几个小时一样慢)再次感谢您的帮助
    【解决方案2】:

    未经测试,但这样设置语句应该可以解决您的问题

    UPDATE A
    SET A.PH_SORT = B.PHCOUNT
    From table1 AS A
    INNER JOIN (SELECT PH_BSP , Count(PH_BSP) AS PHCOUNT  FROM table1 GROUP BY PH_BSP)  AS B
    ON A.PH_BSP=B.PH_BSP
    

    编辑: 您的问题可能来自您的子查询,我会尝试将该部分放入单独的访问查询中,看看它是如何进行的。从记忆中我曾经在访问和子查询方面遇到很多麻烦,方括号有时也会有所帮助,但从记忆中不可靠。

    【讨论】:

    • +1 这也是我没有想到的众所周知的形式。 =)
    • 在访问中这会生成:查询表达式 B.PHCOUNT 中的语法错误(缺少运算符)来自 table1 AS A INNER JOIN (SELECT PH_BSP , Count(PH_BSP) AS PHCOUNT FROM table1 GROUP BY PH_BSP) AS B ON A.PH_BSP=B.PH_BSP
    【解决方案3】:

    你有没有尝试过类似的东西?

    update table1 as a
        set a.ph_sort = (
            select COUNT(b.ph_bsp) as phcount
                from table1 b
                where b.ph_bsp = a.ph_bsp)
    

    我在这里假设 SQL Server。

    但我猜这个或类似的东西应该这样做。

    【讨论】:

    • 表在 .mdb 数据库中,所以访问是去这里...我尝试了上面的 sql 但收到一条消息:“操作必须使用可更新的查询”
    • 此消息表示无法执行更新。这意味着在 DML 的某处不知何故存在错误。事实上,我试图在示例代码中设置 a.ph_bsp = (select...) 而不是 a.ph_sort。也许有了这个更新的样本?
    • @brett:尝试省略AS A,也许这就是表格无法更新的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多