mysql - 根据不同列的值更新列的数据
问题描述
我只想用 ShipDate 更新 InvoiceDate 如果订单的所有行都具有“已发货”状态。
在此示例中,Order 100 的行的 Status 值不是 'Shipped' 。所以我不应该为此 Order 更新 InvoiceDate 。订单 200 的所有行的状态值为“已发货”。所以我可以更新这个订单的 InvoiceDate。
请让我知道如何为此要求编写 SQL 查询?
UPDATE SalesTable A SET A.InvoiceDate= A.ShipDate,
WHERE A.Status= 'Shipped' AND A.InvoiceDate <> A.ShipDate and
NOT EXISTS ( SELECT 1 FROM SalesTable B WHERE B.OrderNumber=A.OrderNumber AND B.Status!='Shipped');
解决方案
在 MySQL 中,您需要使用join
:
UPDATE SalesTable st JOIN
(SELECT st2.OrderNumber
FROM SalesTable st2
GROUP BY st2.OrderNumber
HAVING SUM( B.Status <> 'Shipped') = 0
) st2
USING (OrderNumber)
SET st.InvoiceDate = st.ShipDate;
您不能(轻松)在查询的任何其他部分引用正在更新的表。
推荐阅读
- sql - 使用多个 IN 运算符的子查询
- mongodb - 无法打开文件 /packages/repodata/repomd.xml
- spring - Spring Batch 在 Web 应用程序中找不到全局单例范围的 bean - 出了什么问题?
- go - go sql driver + context cancelled 似乎“泄漏”了 goroutines?
- django - 从站点登录到具有不同域和服务器的另一个站点
- python - 如何解决从 selenium 导入密钥的问题
- python - 在 {% if statement %} 中使用大于 (>) 或小于 (<) 不起作用
- javascript - 使用嵌套钩子更新状态
- c++ - 包含 typedef 时,如何用从右到左的规则解释变量声明?
- c# - 计算数据库 SQL 中的平均值