繁体   English   中英

使用另一个表更新表

[英]Update a table using another table

UPDATE Products 
SET TotalQuantity = (CASE WHEN  P.DateOfLastUpdate < PurchaseDate 
THEN (SUM(P.TotalQuantity) + SUM(M.Quantity)) 
ELSE P.TotalQuantity END) 
FROM Products AS P ,Products_Purchased as M 
WHERE P.ProductName = M.ProductName;  

我要针对另一个表Products_Purchased更新表Products。 如果我将新项目添加到Products_Purchased,则它也必须输入到表Products中,并且还应该更新表Products中的TotalQuantity字段。 此查询有什么问题?

我收到错误消息:

错误1064(42000):您的SQL语法有错误; 在第1行的“ FROM Products AS P,Products_Sold as S WHERE P.ProductName = S.ProductName”附近,查看与您的MySQL服务器版本相对应的手册,以使用正确的语法。

有人可以帮我解决这个问题吗?

我已经解决了您的问题。请按照我的操作进行。

我创建了两个表

 create table products(product_name text,total_quantity int,date_of_lastupdate date);

 create table products_purchased(product_name text,quantity int,date_of_purchase date);

  insert into products values('food',10,'2013-5-6'),('dress',20,'2012-4-7');

  insert into products_purchased('food',15,'2012-2-1'),('dress',12,'2013-6-8');

现在,我尝试使用以下代码在与您尝试的相同的条件下进行更新,并且效果很好。

只需阅读代码,您就会了解我所做的事情,它将解决您的问题。

将产品更新为a,将购买的产品更新为b设置a.total_quantity =

案件

当a.date_of_lastupdate

然后(从*从自然加入产品_购买的产品中选择总和(产品。总数量)+总和(产品_购买的数量)中选择*作为c)

否则a.total_quantity

结束

其中a.productname = b.productname;

认为使用JOIN进行UPDATE FROM将有助于:

UPDATE
    Sales_Import
SET
    Sales_Import.AccountNumber = RAN.AccountNumber
FROM
    Sales_Import SI
INNER JOIN
    RetrieveAccountNumber RAN
ON 
    SI.LeadID = RAN.LeadID

尝试这个

UPDATE Products 
SET TotalQuantity = 
(SELECT CASE WHEN  P.DateOfLastUpdate < PurchaseDate 
THEN (SUM(P.TotalQuantity) + SUM(M.Quantity)) 
ELSE P.TotalQuantity END
FROM Products AS P ,Products_Purchased as M 
WHERE P.ProductName = M.ProductName
AND P.ProductName = :p1)
WHERE ProductName = :p1

:p1是一个参数,其中包含要更新的零件的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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