首页 > 解决方案 > PostgreSQL 不能用另一列的内容更新一列

问题描述

检查了几个线程,有些确实有帮助,但现在我收到一个错误:

错误:用作表达式的子查询返回多行 SQL 状态:21000

即使阅读了一些解释,也不确定确切的问题是什么。如果有人可以使用下面的代码进行解释,将不胜感激。

我有一个名为 的表/视图vw_inv_stock_art_global,它有一个带有数字的“股票”列。

然后我还有一个表 dis_orderoutdetails ,其中有一列“onstock”,需要根据 article_id 复制“stock”单元格,这两个表都有共同点。

UPDATE dis_orderoutdetails
SET onstock = (SELECT stock
        FROM vw_inv_stock_art_global
        WHERE vw_inv_stock_art_global.article_id = dis_orderoutdetails.article_id)
WHERE onstock is NULL
AND EXISTS(SELECT stock
        FROM vw_inv_stoc_art_global
        WHERE vw_inv_stock_art_global.article_id = dis_orderoutdetails.article_id);

如果您感到困扰,请提供额外帮助:我想知道是否有可能仅在 SQL 中更改单元格的背景颜色?想要制作 if...else 并根据结果更改单元格的颜色。

标签: sql

解决方案


您可以在不使用子查询的情况下重构 SQL,例如:

UPDATE dis_orderoutdetails
SET onstock = g.stock
FROM vw_inv_stock_art_global
WHERE vw_inv_stock_art_global.article_id = dis_orderoutdetails.article_id
      and onstock is NULL;

但请注意,此 SQL 的正确性取决于dis_orderoutdetails(article_id)vw_inv_stock_art_global(article_id):之间的关系,article_id它不是 中的唯一列vw_inv_stock_art_global,这UPDATE是不可预测的,因为每个列dis_orderoutdetails都可以使用不同的股票值进行多次更新。


推荐阅读