![](/img/trans.png)
[英]How to update a table due to case statement based on another table? (in Mysql)
[英]Update statement based on another table
我正在尝试更新表中的列以从另一个表获取它,并且我有两个表之间的关系,因为父级具有主键“ tbl_Inv_ClientItemsReturnOrders”,子级具有外键“ tbl_Inv_ClientItemsReturnOrderDetails”。
我尝试这个
update U
set U.InventoryReturnReasonID =
(select InventoryReturnReasonID
from tbl_Inv_ClientItemsReturnOrders
where ClientItemsReturnOrderID = U.ClientItemsReturnOrderID)
from [dbo].[tbl_Inv_ClientItemsReturnOrderDetails] U
但是我得到这个错误
子查询返回的值超过1。 当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。语句已终止。
我想通过表“ tbl_Inv_ClientItemsReturnOrders”中列“ InventoryReturnReasonID”的值更新表“ tbl_Inv_ClientItemsReturnOrderDetails”中的列“ InventoryReturnReasonID”
您可以使用下面给出的查询来更好地了解问题。
SELECT * FROM [dbo].[tbl_Inv_ClientItemsReturnOrderDetails] U
INNER JOIN [dbo].[tbl_Inv_ClientItemsReturnOrders] P ON (P.ClientItemsReturnOrderID = U.ClientItemsReturnOrderID)
我们可以选择使用join编译更新。 查询如下
UPDATE U
SET U.InventoryReturnReasonID = P.InventoryReturnReasonID
FROM [dbo].[tbl_Inv_ClientItemsReturnOrderDetails] U
INNER JOIN [dbo].[tbl_Inv_ClientItemsReturnOrders] P ON (P.ClientItemsReturnOrderID = U.ClientItemsReturnOrderID)
错误非常明显。 您可以使用TOP 1
选择任意值:
Update U
set U.InventoryReturnReasonID = (select TOP 1 ro.InventoryReturnReasonID
from tbl_Inv_ClientItemsReturnOrders ro
where ro.ClientItemsReturnOrderID = U.ClientItemsReturnOrderID
)
from [dbo].tbl_Inv_ClientItemsReturnOrderDetails U;
通常, TOP
应该具有ORDRER BY
。 您可以包括ORDER BY
以指定更新应使用多个值中的哪个。
注意:使用合格的列名(即包括表别名)总是一个好主意。 对于相关的子查询,它应该是强制性的,因为如果出现问题,可能会造成危险。 例如,如果ro.ClientItemsReturnOrderID
列不存在,则查询将返回太多行。
另一种方法是使用聚合:
Update U
set U.InventoryReturnReasonID = (select max(ro.InventoryReturnReasonID)
from tbl_Inv_ClientItemsReturnOrders ro
where ro.ClientItemsReturnOrderID = U.ClientItemsReturnOrderID
)
from [dbo].tbl_Inv_ClientItemsReturnOrderDetails U;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.