MySQL_계층쿼리 질문드립니다. 0 6 4,264

by 강서꽃미남 [2014.08.07 15:32:04]


 

안녕하세요. 요즘 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 '????'

이런식으로 구현하고 싶은데 쿼리를 어떻게 풀어야 할까요.. 

by 우리집아찌 [2014.08.07 16:09:57]

CASE 문이 MY-SQL은 틀린가?

ELSE가 계속붙네..

 


by 강서꽃미남 [2014.08.07 16:46:51]

조건이 여러개라서요 각 컬럼마다 달라서요 아발란체님이 답변주신대로 하는게 맞는거 같더라구요 찾아보니.


by 아발란체 [2014.08.07 16:34:21]
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)
;

 


by 강서꽃미남 [2014.08.07 16:47:08]

저도 찾아보니 이런방법으로 해야 될것 같더라구요..ㅠㅠ 감사합니다 ^^


by 강서꽃미남 [2014.08.07 18:07:10]

아발란체님 이 방법으로도 안됩니다...;;;

where 절 자체에 칼럼 = (case when then )식으로 써지질 않아요..;;

 

-- 해결요

 

where sum  = case when '20131122175434' = '' then '20131122' else substr('20131122175434', 1, 8) end 

>> end 을 밖에...2시간동안 헤맷네요;;


by 아발란체 [2014.08.07 16:39:28]

■ Managing Hierarchical Data in MySQL

http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/hierarchical-data.html

>> 이미 검색해서 보셨겠지만 MySQL은 정석이 없는 것 같습니다. 결론은 조금 복잡하게 쓰는 것은 어쩔수 없는 것 같습니다.

>> 함수를 만들어 쓰는 스크립트를 올리신 분도 계시네요, 복사해서 붙이니 잘 돌아갑니다. / http://kimyhcj.tistory.com/127

>> 근데 작년인가 MySQL 업데이트 내용을 보면서 계층(재귀) 지원을 위한 업데이트 내용을 보며 이런 처리를 그나마 쉽게 할 수 있겠구나 했는데... 막상 찾을려니 관련 내용이 잘 안보이네요. 근데 새로운 기능 지원으로 방향성을 줬던 내용이지 쉽게 짤 수 있었던 내용은 아니였습니다. 딴데서 봤나.. ㅠㅠ

 

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