ОБНОВЛЕНИЕ нескольких столов с ГДЕ не работает - PullRequest
0 голосов
/ 09 января 2019

Может кто-нибудь помочь мне понять, почему при запросе UPDATE выдается ОШИБКА?

WITH subt AS (
                SELECT t.portfolio, s.isin, t.quantity, t.date
                    FROM transactions t
                    JOIN stocks s
                        ON t.stock = s.name
                    ORDER BY t.id DESC
                    LIMIT 1
                )

UPDATE holdings h
    JOIN subt
        ON h.portfolio = subt.portfolio
            AND h.isin = subt.isin
    SET h.end_date = DATE_SUB(subt.date, INTERVAL 1 DAY)
    WHERE h.end_date is NULL

Я получаю ошибку:

Ошибка SQL (1064): в синтаксисе SQL есть ошибка; проверить руководство, которое соответствует вашей версии сервера MariaDB для права синтаксис для использования около 'UPDATE holdings h JOIN subt ON h.portfolio = субпортфолио И h.isin 'в строке 10

Пока ниже SELECT работает нормально:

WITH subt AS (
                SELECT t.portfolio, s.isin, t.quantity, t.date
                    FROM transactions t
                    JOIN stocks s
                        ON t.stock = s.name
                    ORDER BY t.id DESC
                    LIMIT 1
                )

SELECT h.*
FROM holdings h
    JOIN subt
        ON h.portfolio = subt.portfolio
            AND h.isin = subt.isin
    WHERE h.end_date is NULL

Я работаю с базой данных MariaDB 10 через HeidiSQL

1 Ответ

0 голосов
/ 09 января 2019

Вместо результата WITH вы можете попробовать использовать обычное внутреннее объединение для подзапроса

UPDATE holdings h
JOIN 
  (
            SELECT t.portfolio, s.isin, t.quantity, t.date
                FROM transactions t
                JOIN stocks s
                    ON t.stock = s.name
                ORDER BY t.id DESC
                LIMIT 1
            )  subt
    ON h.portfolio = subt.portfolio
        AND h.isin = subt.isin
SET h.end_date = DATE_SUB(subt.date, INTERVAL 1 DAY)
WHERE h.end_date is NULL
...