ORACLE > MySQL 변환 중 merge문 질문 드리겠습니다. 0 2 4,938

by 쏘쓰 [SQL Query] ORACLE MySQL merge duplicate join subquery [2019.09.02 18:17:11]


안녕하세요. 질문 하나 드리겠습니다. 도와주세요.

ORACLE > MySQL 변환 중 아래와 같이  merge T1 using (SUBQUERY) 형태의 쿼리를

mysql 로 변환 하는데 헤매고 있습니다.

---------------------------------------------------------------------------------

merge into table1 a using (
    select id, column1, column2, rank
    from (
        select
            id,
            column1,
            column2,
            row_number() over(order by column1 desc nulls last) rank
        from table1 a left join (
            select 
                name, sum(column1) column1, sum(column2) column1
            from table2 b
            group by name
        ) b on a.name = b.name
    order by column1 desc)
) b on (a.id = b.id)
when matched then update set a.column1 = b.column1;

--------------------------------------------------------------------------------------------------

일단, 저 쿼리가 실행 되기 이전에 안쪽 select 쿼리라도 실행 해보려 아래와 같이 짜보았는데 너무 어렵네요.

-------------------------------------------------------------------------------------------------

select id, column1, column2, rank
from (
    select x.*, @rownum := @rownum + 1 as rank
    from (
        select id, column1, column2
        from table1 a
        left join (
            select name, sum(column1) as column1, sum(column2) as column2
            from table2
            group by name
        ) b on a.name = b.name
        join (select @rownum := 0) as r
        order by column1 is null desc, column1 desc
    ) x
) t

---------------------------------------------------------------------------------------

참고로 table1 에도 name 컬럼이 있습니다.

어느부분이 잘못 되었는지, 그리고 참고할 만한 문서라도 추천해주신다면 감사하겠습니다.

도와 주세요.

by 마농 [2019.09.04 10:38:55]

1. 분석함수
 - MySQL 도 최신버전(8.0 ?)은 rank 등의 분석함수를 지원합니다.
 - 버전 확인해 보세요.
2. 기존 쿼리의 문제점.
 - rank 나 order by 구문이 사용되었지만 쓸 데가 없습니다.
 - rank 나 order by 를 뺀다면 훨씬 더 간결해 질 것이고
 - MySQL 로의 변환도 더 쉬울 것입니다.


by 쏘쓰 [2019.09.06 14:40:17]

답변 감사합니다

버전이 5.7.x 이라 안되겠네요 ㅠㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입