如何在联接两个表时解决FROM中的错误语法错误?

时间:2019-06-28 09:15:20

标签: mysql sql

我正在开发数据库,​​并且在此问题中使用了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

6 个答案:

答案 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关键字。