안녕하세요. 요즘 MySQL로 이관하는 여러 문제를 겪는데, 저희 회사엔 계층쿼리가 상당히 많습니다.
프로시저에서 계층쿼리는 대충 보고 따라하긴했는데, 일반 쿼리에서 mysql의 쿼리로 변환이 어려워 질문드립니다.
이클립스에서 아래와 같은 쿼리가 있다고 할때, 변환을 어떻게 해야 할까요?
start with 랑 connect by 구절을 오라클에선 이해가 가는데 mysql로 편법으로 풀기에 어렵습니다.
도움 부탁드립니다.
select * from ( select level , id , name , YN from A_TABLE start with CHANNEL_ID= #channel_id# connect by prior parent = child)
하나만 더 추가적으로, with절도 mysql 지원이 안되네요,
where 절에 decode문을 case when으로 변경하려하는데, 에러가 발생하더라구요.
where sum_dt = decode(#date#, '', '20141122', substr(#date#, 1, 8)) sum_hh= decode(#date#, '', '20141122', substr(#date#, 9, 2)) ---> SELECT CASE WHEN sum_dt = '20130902101656' THEN '20131122' ELSE substr('20130902101656', 1, 8); WHEN sum_hh = '' THEN date_format(now(),'%H') ELSE substr('20130902101656', 9, 2) WHEN sum_mi = '' THEN date_format(now(),'%i') ELSE substr('20130902101656', 11, 2) ELSE '????'
이런식으로 구현하고 싶은데 쿼리를 어떻게 풀어야 할까요..
CREATE TABLE TESTT ( sum_dt VARCHAR(8) ); INSERT INTO TESTT VALUES('20140101'); INSERT INTO TESTT VALUES('20140102'); SET @T_DATE = '201401020000999'; SELECT * FROM TESTT WHERE --sum_dt = decode(#date#, '', '20141122', substr(#date#, 1, 8)) sum_dt = (CASE WHEN @T_DATE = '' THEN '20140101' ELSE SUBSTR(@T_DATE, 1, 8) END) ;
■ Managing Hierarchical Data in MySQL
http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/hierarchical-data.html
>> 이미 검색해서 보셨겠지만 MySQL은 정석이 없는 것 같습니다. 결론은 조금 복잡하게 쓰는 것은 어쩔수 없는 것 같습니다.
>> 함수를 만들어 쓰는 스크립트를 올리신 분도 계시네요, 복사해서 붙이니 잘 돌아갑니다. / http://kimyhcj.tistory.com/127
>> 근데 작년인가 MySQL 업데이트 내용을 보면서 계층(재귀) 지원을 위한 업데이트 내용을 보며 이런 처리를 그나마 쉽게 할 수 있겠구나 했는데... 막상 찾을려니 관련 내용이 잘 안보이네요. 근데 새로운 기능 지원으로 방향성을 줬던 내용이지 쉽게 짤 수 있었던 내용은 아니였습니다. 딴데서 봤나.. ㅠㅠ