source

사용할 올바른 구문은 MariaDB 서버 버전에 해당하는 설명서를 확인하십시오.

manysource 2023. 8. 13. 09:49

사용할 올바른 구문은 MariaDB 서버 버전에 해당하는 설명서를 확인하십시오.

SQL 구문을 만들려고 합니다.

UPDATE `%s`
JOIN (WITH t2 AS
(
SELECT LAG(storymain_id,1) OVER (ORDER BY storymain_id) AS lg, `%s`.* 
FROM `%s`
)
SELECT t2.*,
1 + SUM(CASE WHEN COALESCE(lg,storymain_id) = storymain_id THEN 0 ELSE 1 END ) 
OVER (ORDER BY storymain_id) AS new_id
FROM t2 ) t2
ON `%s`.storymain_id = t2.storymain_id SET `%s`.storymain_id = t2.new_id;

내 maria-db 서버에서 다음 버전:

mysql  Ver 15.1 Distrib 10.1.44-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

실행할 때 오류가 발생했습니다.

SQLSTATE[42000]:
Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that 
corresponds to your MariaDB Server version for the right syntax to use near 't2 AS\r\n\t\t\t\t 
(\r\n\t\t\t\t\tSELECT LAG(storymain_id, 1) OVER (ORDER BY storymain_id) AS' at line ~.

작동을 시켜야 하는데 구문을 어떻게 바꾸는지 모르겠어요.

도와주셔서 감사합니다...

저는 그냥 cte를 일반 파생 테이블로 교체할 것입니다.cte는 쿼리에서 한 번만 사용하는 것이 아니므로 다음과 같은 문제가 발생하지 않습니다.

update `%s`
join (
    select 
        t2.*,
        1 + sum(case when coalesce(lg,storymain_id) = storymain_id then 0 else 1 end) 
            over (order by storymain_id) as new_id
    from (
        select 
            lag(storymain_id,1) over (order by storymain_id) as lg, 
            `%s`.* 
        from `%s`
    ) t2
) t2
on `%s`.storymain_id = t2.storymain_id 
set `%s`.storymain_id = t2.new_id;

그렇지 않으면 MySQL은with문의 시작 부분에 있는 절:

with t2 as (
    select 
        lag(storymain_id,1) over (order by storymain_id) as lg, 
        `%s`.* 
    from `%s`
)
update `%s`
join (
    select 
        t2.*,
        1 + sum(case when coalesce(lg,storymain_id) = storymain_id then 0 else 1 end) 
            over (order by storymain_id) as new_id
    from t2
) t
on `%s`.storymain_id = t.storymain_id 
set `%s`.storymain_id = t.new_id;

참조:

WITH 절은 다음 컨텍스트에서 허용됩니다.

  • SELECT, UPDATE 및 DELETE 문 시작 부분.

    WITH ... SELECT ...

    WITH ... UPDATE ...

    WITH ... DELETE ...

언급URL : https://stackoverflow.com/questions/60554438/check-the-manual-the-corresponds-to-your-mariadb-server-version-for-the-right-sy