【问题标题】:Using update Query for updating multiple rows with calculations使用 update Query 通过计算更新多行
【发布时间】:2017-09-26 06:50:58
【问题描述】:

我有 2 个表,一个“product”表

**prod_cat**     **prod_code**    **prod_name**   **prod_desc** **prod_price** **prod_stock**

MB01 MB01_micro ASU M5A_M 华硕主板 7500 enter image description here45

PRO01 PRO01_01 INT_i3_7300 Intel core i3 处理器 9313 5

和另一个表“cart”表

id cart_cust_id  cart_prod_id  cart_qty cart_prod_total cart_status
1   xxxx            ASU M5A_M     1        7500            NOT PAID
2   xxxx            INT_i3_7300   2        18626           NOT PAID

我需要的是根据“cart_qty”中的值减少“prod_stock”的查询或过程。有什么建议么 ?

我还提供了链接中2个表格的截图。Screen shots of the tables

我的更新声明:

UPDATE product 
  SET prod_stock = ((SELECT cart_quantity 
                     FROM cart 
                     WHERE prod_code LIKE cart_prod_id 
                       AND cart_cust_id LIKE 'Gireesh.R.Pai@gmail.com' 
                       AND cart_status LIKE 'NOT PAID') - prod_stock) 

给出错误:

消息 512,级别 16,状态 1,行 1 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。该语句已终止。

【问题讨论】:

  • 这里的大多数人想要格式化的文本,而不是图像。 (或者,更糟糕的是,图片链接。)
  • 标记您正在使用的 DBMS。
  • 并显示您尝试过的操作(关于 UPDATE 命令...)
  • 对不起。它不允许我直接上传图片。我现在这样。对于这些错误,我深表歉意。
  • 我尝试了什么更新产品 SET prod_stock =((从购物车中选择 cart_quantity,其中 prod_code LIKE cart_prod_id AND cart_cust_id LIKE 'Gireesh.R.Pai@gmail.com' AND cart_status LIKE 'NOT PAID')- prod_stock )

标签: sql sql-server tsql sql-update


【解决方案1】:

你可以加入表格和

 ;WITH T AS(
    Select * FROM Product P 
    INNER JOIN CART C ON C.cart_prod_id = P.prod_code
    )
    Update T SET prod_stock = prod_stock - cart_quantity

【讨论】:

    【解决方案2】:

    不使用 tempdb(更快的方式):

    UPDATE P
    SET
        P.prod_stock = P.prod_stock - C.cart_quantity
    FROM
        Product AS P
        INNER JOIN CART AS C ON (C.cart_prod_id = P.prod_code)
    

    您可以添加 WHERE 子句:

    UPDATE P
    SET
        P.prod_stock = P.prod_stock - C.cart_quantity
    FROM
        Product AS P
        INNER JOIN CART AS C ON (C.cart_prod_id = P.prod_code)
    WHERE *XXX* = *YYY* AND ...
    

    【讨论】:

      猜你喜欢
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2013-06-11
      • 1970-01-01
      相关资源
      最近更新 更多