繁体   English   中英

基于另一个表的更新语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM