mariaDB로 변경하면서 ROW_NUMBER() 질문이있습니다 0 2 1,950

by 허영현 [2023.04.10 14:09:09]


SELECT ROW_NUMBER() OVER(ORDER BY sbt.ENTRYDATE DESC, sbt.TARGETNO DESC) PAGESEQ
					, sbt.TARGETNO
					, sbt.TARGETYEAR, sbt.CMPID, sbt.CATEGORYID, sbt.TITLE, sbt.SUBTITLE
					, sbt.BGNDATE, sbt.ENDDATE, sbt.EXEDEPTID, sbt.MGCYCLEID
					, sbt.SSWRITERSQ, sbt.ENTRYDATE, sbt.UPDDATE, sbt.DELETEFLAG
					
			FROM SH_BM_TARGET sbt
			WHERE sbt.DELETEFLAG = 'N'

마리아DB도 10.2 부터 row_number를 지원하지만 버전이 낮아서 따로 구현해야하는데

이구문을 @row= @row + 1이걸 이용하여 구현하고 싶은데 잘 안되네요... 그리고 추가로

SELECT @row_num:= @row_num + 1 as PAGESEQ
					, sbe.ZONESQ
					, sbe.EVTSQ, sbe.USERSQ, sbe.BEACONNO, sbe.EVTTYPE, sbe.ENTRYDATE
					, sbz.ZONENAME, sbz.DESCRIPTION
					, sbe.DANGERCODE, sbe.DGSTRDATE, sbe.DGENDDATE
			FROM SH_BC_EVENTS sbe, (SELECT @row_num:= 0) AS c
			INNER JOIN SH_BC_ZONES sbz
			ON sbz.ZONESQ  = sbe.ZONESQ
			WHERE 1 = 1;

이구문을 셀렉해보면 SQL Error [1054] [42S22]: (conn=1201) Unknown column 'sbe.ZONESQ' in 'on clause' 자꾸 언노운 컬럼이라고 하더라구요 그래서

SELECT @row_num:= @row_num + 1 as PAGESEQ
					, sbe.ZONESQ
					, sbe.EVTSQ, sbe.USERSQ, sbe.BEACONNO, sbe.EVTTYPE, sbe.ENTRYDATE
					, sbz.ZONENAME, sbz.DESCRIPTION
					, sbe.DANGERCODE, sbe.DGSTRDATE, sbe.DGENDDATE
			FROM SH_BC_EVENTS sbe
			INNER JOIN SH_BC_ZONES sbz
			ON sbz.ZONESQ  = sbe.ZONESQ
			WHERE 1 = 1;

이렇게 변경하니 또 되네요... 답변 부탁드리겠습니다.

by 마농 [2023.04.10 14:50:30]
-- 1. @변수를 이용하여 순번 처리
SELECT @row_num := @row_num + 1 pageseq
     , sbt.targetno
     , sbt.targetyear
     , sbt.cmpid
     , sbt.categoryid
     , sbt.title
     , sbt.subtitle
     , sbt.bgndate
     , sbt.enddate
     , sbt.exedeptid
     , sbt.mgcycleid
     , sbt.sswritersq
     , sbt.entrydate
     , sbt.upddate
     , sbt.deleteflag
  FROM sh_bm_target sbt
     , (SELECT @row_num:= 0) c
 WHERE sbt.deleteflag = 'N'
 ORDER BY sbt.entrydate DESC, sbt.targetno DESC
;

2. 에러가 나는 이유는
ANSI 조인과 컴마 조인을 섞어 쓰면서 
c 와 sbz 간의 조인이 되면서 앞에 있는 sbe 를 인식하지 못하는 듯 하네요.
c 를 맨 잎에 붙여 보세요.
- 변경전 : FROM sbe, c JOIN sbz ON
- 변경후 : FROM c, sbe JOIN sbz ON
아니면 조인을 혼합하여 쓰지 마시고 ANSI 조인으로 통일시키세요.
- 변경후 : FROM sbe CROSS JOIN c INNER JOIN sbz ON ...

 


by 허영현 [2023.04.10 15:49:34]

감사합니다. !!

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