提问者:小点点

需要有关SQL查询的帮助,错误消息操作数应包含%1列


日安

我有以下查询,但收到一条错误消息“操作数应包含1列”

如有任何协助,将不胜感激

UPDATE expenditure
SET BP = (
    SELECT * ,
           SUM(balance_provision - actual_amt_voucher) over (partition by voteid order by expenditureid) AS BalanceProvision
    FROM expenditure
)

共1个答案

匿名用户

您似乎想用窗口和更新列bp

查询失败,因为您试图将resultset(具有多列)分配给单个Column。

但是,即使是从子查询返回标量值,这也是行不通的,因为MySQL不允许在子查询中重用update的目标表。

相反,yo可以使用update.。。join语法。 假设prispureId是表的主键(如其名称所示),则为:

update expenditure e
inner join (
    select 
        expenditureid, 
        sum(balance_provision - actual_amt_voucher) over (partition by voteid order by expenditureid) bp
    from expenditure
    group by expenditureid
) e1 on e.expenditureid = e1.expenditureid
set e.bp = e1.bp