sql - 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,例如:
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
都可以使用不同的股票值进行多次更新。
推荐阅读
- r - 如何在函数参数中使用 for 循环?
- r - RenderUI - 语法问题
- javascript - 如何在 SquareSpace 上的下拉框中添加条件表单
- c# - 使用过滤器时,如果您希望返回某些内容,是否应该始终将上下文的结果设置为 ContentResult 对象?
- javascript - 在流程中,给定 ?boolean 变量,如何在不遇到粗略的空检查的情况下检查“它们中的任何一个是否为真”?
- sed - 在生成文件中加入两个字符串列表
- java - Java 结构 JFrame GUI
- moqui - 在 Moqui 中自定义主题
- python - 在 Ubuntu 服务器上使用 python 获取写入 USB 闪存驱动器的必要权限
- java - 将两个 YV12 图像缓冲区组合成一个并排图像 Java/Android