首页 > 解决方案 > SQL 使用另一个表中的计数更新多行

问题描述

假设我有两张桌子。一个表 tbl1 是“长的”且非聚合的。结构如下:

Software_Name:
Word
PowerPoint
PowerPoint
Excel
Word
PowerPoint

在第二个表 tbl2 中,我想总结第一个表中的数据,即软件计数。第二个表将具有如下结构:

Software_Name:      Count:
Word                 2
PowerPoint           3
Excel                1

我努力了:

update tbl2
set count = 
(select count(software_name)
from tbl1
group by software_name
where tbl1.software_name = tbl2.software_name)
from tbl1

我将结果插入到正确的列中,但它不是正确的值。它是所有值的总和,在本例中为 5。我包含了该where子句,因为在我的 tbl1 中,我有更多的 software_names,而不是对 tbl2 中的计数感兴趣。

更新 我在这个项目中使用 Teradata Aster。我一直在查看 UPDATE 命令的 Aster 文档并遇到了这个问题:

UPDATE [ ONLY ] table
   SET column = expression [, ...]
   [ FROM fromlist ]
   [ WHERE condition | WHERE CURRENT OF cursor_name ];

在阅读 fromlist 时,我发现了以下信息:

请注意,目标表不得出现在 fromlist 中,除非您打算进行自联接(在这种情况下,它必须与 fromlist 中的别名一起出现)。

标签: sqlcountsql-updateteradata-aster

解决方案


你想要一个相关的子查询:

update tbl2
    set count = (select count(*) from tbl1 where tbl1.software_name = tbl2.software_name);

推荐阅读