Как исправить синтаксическую ошибку, когда FROM неверен при объединении двух таблиц? - PullRequest
2 голосов
/ 28 июня 2019

Я занимаюсь разработкой базы данных и использую две конкретные таблицы в этой задаче: Artwork (ArtworkID, Price, PurchaseID) и Purchase (PurchaseID, Total)

Я хочу добавить Artwork.Price.художественных работ, имеющих одинаковый Artwork.PurchaseID (в частности, идентификатор 'D4758', хотя мне бы хотелось, чтобы программа могла суммировать все идентификаторы PurchaseID в одном запросе).

Затем я хочу добавить сложенные ценычтобы быть помещенным в Purchase.Total под соответствующей строкой Purchase.PurchaseID

Я пробовал несколько способов, но я все еще получаю ошибку синтаксиса SQL, предположительно в строке 3, я пытался изменить Artwork на покупку, но я все ещевозьми.Я довольно новичок в Joins, поэтому я не уверен, что делать.Ниже приведен код, который я разработал:

UPDATE Purchase
SET Purchase.Total = SUM(Artwork.Price)
FROM Artwork
INNER JOIN Artwork ON Purchase.PurchaseID = Artwork.PurchaseID
WHERE Artwork.PurchaseID = 'D4758';

Результат должен изменить Buy.Total с NULL на десятичное (5,2) значение SUM для Artwork.Price, для которогоID-идентификатор покупки равен D4758.

Я вместо этого получаю ошибку

#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

Ответы [ 5 ]

1 голос
/ 28 июня 2019

Решено:

UPDATE Purchase
    SET Total = (SELECT sum(Price)
                 FROM Artwork
                 WHERE Purchase.PurchaseID = Artwork.PurchaseID
                )
 WHERE Purchase.PurchaseID = 'D4758'
0 голосов
/ 28 июня 2019

Вы можете использовать UPDATE для этого, но вы хотите вычислить SUM() в подзапросе.Я бы порекомендовал:

UPDATE Purchase p JOIN
       (SELECT aw.PurchaseID, SUM(aw.Price) as total_price
        FROM Artwork aw
        WHERE aw.PurchaseID = 'D4758'
        GROUP BY aw.PurchaseID
       ) aw
       ON p.PurchaseID = aw.PurchaseID
    SET p.Total = aw.total_price;
0 голосов
/ 28 июня 2019

Ваше предложение FROM должно указывать на таблицу, которую вы пытаетесь обновить (Покупка), а затем СОЕДИНЯТЬСЯ со связанной таблицей (Artwork), поэтому ваш запрос должен быть:

UPDATE
  Purchase
SET
  Purchase.Total = SUM(Artwork.Price)
FROM
  Purchase
INNER JOIN
  Artwork 
ON 
  Purchase.PurchaseID = Artwork.PurchaseID
WHERE
  Artwork.PurchaseID = 'D4758';
0 голосов
/ 28 июня 2019

Ваш запрос основан на синтаксисе обновления для 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'

Синтаксис для set в mySQL:

UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET assignment_list
[WHERE where_condition]
0 голосов
/ 28 июня 2019

вам нужно написать ключевое слово 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...