by apeach [SQL Query] postgreSQL UNION ALL [2018.08.08 16:53:23]
우선 아주아주 초보입니다.. 아래 쿼리도 시행착오가 많았습니다..
제가 질문드리고 싶은 내용은 두가지 입니다.
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에서 사용된 문법?은 주석처리 하였습니다.
해당 쿼리를 조회하면 나오는 결과의 일부분을 첨부했습니다.
많은 조언과 도움의 손길 부탁드립니다!