programing

WHERE가 작동하지 않는 다중 테이블 업데이트

bestprogram 2023. 8. 5. 10:45

WHERE가 작동하지 않는 다중 테이블 업데이트

아래 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 구문에 오류가 있습니다. 10행에서 'UPDATE holdingsh JOIN 하위 ON.h.sub = sub.h.isin' 근처에서 사용할 올바른 구문은 MariaDB 서버 버전에 해당하는 설명서를 확인하십시오.

아래의 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

HeyidiSQL을 통해 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

언급URL : https://stackoverflow.com/questions/54117604/multiple-table-update-with-where-not-working