sql - 从另一个多记录表更新多记录表
问题描述
我不知道它的正确标题。但是,让我解释一下我的问题。
我有 2 张桌子
PartTable
-------------------------------
ID | Quantity
1 | 10
2 | 10
3 | 10
TransTable
-------------------------------
TransID |ID | QtyIssue
1 |1 | 2
1 |2 | 2
1 |3 | 2
对于 TransTable,我使用单个查询来插入。
如何在单个查询中更新 PartTable 上的数量?
Quantity = Quantity - QtyIssue
我正在使用这个更新语句:
UPDATE PartTable SET Quantity = Quantity - (SELECT QtyIssue FROM TransTable WHERE TransID = 1)
WHERE ID IN (SELECT ID FROM TransTable WHERE TransID = 1)
但是错误:
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
可能吗?
请帮助任何人。谢谢。
解决方案
您可以使用派生表对其进行更新
UPDATE PartTable
SET Quantity = Quantity - b.QtyIssue
FROM PartTable a
INNER JOIN (
SELECT SUM(QtyIssue) QtyIssue,ID
FROM TransTable WHERE TransID = 1
GROUP BY ID) b ON a.ID = b.ID
推荐阅读
- python - Herepy EV充电站API;发生错误:禁止访问,说明:这些凭据未授权访问
- r - 在条件下选择R中的多个字符串值
- go - 在 Google Calendar API 中使用哪个日历 ID?
- arrays - 在 React 中基于 JSON 响应创建 HTML 有序列表
- mysql - 匹配精确模式
- kotlin - 如何为对象生成附加属性为假的 swagger json?
- docker - 使用 Docker 和 GitlabCI 部署和自定义 VueJs 应用程序
- django - 使用自定义用户模型 Django 登录 Facebook
- flutter - 为什么这会给我一个错误?以及如何修复它(上下文错误)
- azure - Azure Active Directory B2B 备用登录 ID