我正在开发数据库,并且在此问题中使用了2个特定的表,分别是图稿(ArtworkID,价格,PurchaseID)和购买(PurchaseID,总计)
我想将具有相同Artwork.PurchaseID的艺术品的Artwork.Price加在一起(尽管我希望程序能够在同一查询中总计所有PurchaseID)。
/ p>
然后我希望将相加后的价格放入相应的Purchase.PurchaseID行下的Purchase.Total中
我已经尝试了多种方法,但是据推测在第3行上我一直遇到SQL语法错误,我尝试将Artwork更改为Purchase,但还是得到了。我对Joins相当陌生,所以我不确定该怎么做。下面是我开发的代码:
UPDATE Purchase
SET Purchase.Total = SUM(Artwork.Price)
FROM Artwork
INNER JOIN Artwork ON Purchase.PurchaseID = Artwork.PurchaseID
WHERE Artwork.PurchaseID = 'D4758';
结果应将Purchase.Total从NULL更改为购买ID为'D4758'的Artwork.Price的十进制(5,2)SUM值。
我反而得到了错误
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM Artwork INNER JOIN Artwork ON Purchase.PurchaseID = Artwork.PurchaseID WH' at line 3
答案 0 :(得分:1)
已解决:
UPDATE Purchase
SET Total = (SELECT sum(Price)
FROM Artwork
WHERE Purchase.PurchaseID = Artwork.PurchaseID
)
WHERE Purchase.PurchaseID = 'D4758'
答案 1 :(得分:0)
您需要在连接发生后写set关键字。还要删除FROM
关键字。
UPDATE Purchase as p
INNER JOIN Artwork as a ON p.PurchaseID = a.PurchaseID
SET p.Total = SUM(a.Price)
WHERE a.PurchaseID = 'D4758';
答案 2 :(得分:0)
您的FROM
子句必须指向您要更新的表(购买),然后指向相关表(艺术品)进行JOIN,因此您的查询应为:
UPDATE
Purchase
SET
Purchase.Total = SUM(Artwork.Price)
FROM
Purchase
INNER JOIN
Artwork
ON
Purchase.PurchaseID = Artwork.PurchaseID
WHERE
Artwork.PurchaseID = 'D4758';
答案 3 :(得分:0)
您的查询基于SQL Server的更新语法,您在更新后立即编写SET语句。在mysql中,您应该在末尾写SET语句。
UPDATE
Purchase pr
INNER JOIN
Artwork ar
ON
pr.PurchaseID = ar.PurchaseID
SET
pr.Total = SUM(ar.Price)
WHERE
ar.PurchaseID = 'D4758'
在mySQL中设置的语法为
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET assignment_list
[WHERE where_condition]
答案 4 :(得分:0)
您可以为此使用Task
,但是您想在子查询中计算UPDATE
。我建议:
SUM()
答案 5 :(得分:0)
尝试一下:
UPDATE Purchase as P
INNER JOIN Artwork as A ON P.PurchaseID = A.PurchaseID
SET P.Total = SUM(A.Price)
WHERE A.PurchaseID = 'D4758';
在update query
中,您不使用FROM
关键字。