簡體   English   中英

WHERE 不工作的多表更新

[英]Multiple-table UPDATE with WHERE not working

有人能幫我理解為什么下面的 UPDATE 查詢會產生 ERROR 嗎?

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 服務器版本相對應的手冊,以在第 10 行的“UPDATE 控股 h JOIN subt ON h.portfolio = subt.portfolio AND h.isin”附近使用正確的語法

雖然低於 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

我正在通過 HeidiSQL 使用 MariaDB 10 數據庫

您可以嘗試在子查詢上使用普通的內部聯接,而不是 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM