postgreSQL에서 테이블 2개 UNION ALL 사용 질문입니다. 0 4 3,718

by apeach [SQL Query] postgreSQL UNION ALL [2018.08.08 16:53:23]


이미지 1.jpg (275,009Bytes)

우선 아주아주 초보입니다.. 아래 쿼리도 시행착오가 많았습니다.. 

제가 질문드리고 싶은 내용은 두가지 입니다. 

1. UNION ALL 을 사용하는 것 보다 좋은 방법은 무엇이 있나요?

2. 현재 쿼리의 문제는 없는 건가요? 아래 쿼리는 최대한 생략했는데.... 실제로는 너무 길어서요... 

 

제가 원하는 결과는 이렇습니다. (원하는 결과물이 나오기는 했으나... 더 좋은 방법이 있을까해서 질문드립니다...)

구분값을 받아서 그 값이 없거나, 공백일때는 전체(A,B table)를 출력하고,

구분값이 1일때는 A 테이블 내용을 출력하고, 구분값이 2일때는 B 테이블 내용을 출력하는 것 입니다. 

단, 정렬조건에 A 테이블은 start_dt 내림차순, B 테이블은 use_dt 내림차순입니다.

전체를 조회할때는 A와 B가 섞여서? A는 start_dt DESC,  B는 use_dt DESC 로 정렬된게 출력되게 하고 싶습니다.

쿼리는 아래와 같습니다.

SELECT rn,
	seq,
	gubun,
	gbn,
	use_dt,
	start_dt,
	end_dt,
	noti_yn
FROM (
	SELECT seq,
		gubun,    
		gbn,
		use_dt,
		start_dt,
		end_dt,
		noti_yn,
		ROW_NUMBER() OVER(ORDER BY use_dt desc, noti_yn DESC, seq DESC) AS rn
	FROM (
		SELECT seq,
			'1' as gubun,
			gbn,
			start_dt AS use_dt,  
			start_dt,
			end_dt,
			noti_yn
		FROM A
		UNION ALL
		SELECT seq,
			'2' as gubun,
			'' AS gbn,
			use_dt,
			'2000-01-01 00:00:00' AS start_dt,
			'2000-01-01 00:00:00' AS end_dt,
			noti_yn		                
		FROM B  
		WHERE  to_char(now(), 'yyyyMMdd') >= to_char(use_dt, 'yyyyMMdd')
	    )A
	    WHERE 1=1
	    -- 
	    --AND gubun = #{search_gbn}
	    --
    )B
--where rn  > (#{notice_start} ::numeric) and rn < (#{notice_start} ::numeric)+8
ORDER BY rn ASC

mybatis에서 사용된 문법?은 주석처리 하였습니다. 

해당 쿼리를 조회하면 나오는 결과의 일부분을 첨부했습니다. 

많은 조언과 도움의 손길 부탁드립니다!

 

by 마농 [2018.08.08 18:22:53]

마지막 정령은 불필요해 보입니다.
다른 부분은 문제 없어 보입니다.


by 우리집아찌 [2018.08.08 19:32:14]

정령=> 정렬..


by apeach [2018.08.09 10:17:03]

조언 감사드립니다!!

혹시 union all 말고 다른 방법으로 쿼리를 짜려면 어떤 방법이 있는지 알 수 있을까요?


by 마농 [2018.08.09 10:32:00]

테이블이 2개니 union all 해야죠

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