안녕하세요 제가 하고싶은 질문은
select a.*from
(select * from apple
where cust_no = :cust_no
and br_no = :br_no
order by cust_no) a
union all
select b.* from(
select * from apple
where cust_no = :cust_no
and br_no in (select br_no from banana where br_no ='04')
order by br_no) b
이렇게 쿼리를 짰는데
a= 1,2
b= 1,2,3이면
출력됐을때 1,2,1,2,3 중복되서 나오더라고요
union을 쓰면 두개 쿼리가 합쳐져서 정렬되서 나오구..
혹시 다른 방법 없나요?
무조건 첫번째 쿼리가 제일먼저 출력되고 두번째 쿼리가 출력되야해요...
도와주세요ㅜㅜ
1. 무의미한 정렬에 대한 답변이 없네요.
- order by cust_no 에서 cust_no 는 한가지 값(:cust_no) 으로 고정값이죠.
- 고정값에 대한 정렬은 무의미합니다.
2. 두개의 쿼리가 거의 같은 형태인데.
- 2번 쿼리의 '04' 가 1번 쿼리의 :br_no 와 같은 값인가요?
- 2번 쿼리의 '04' 가 1번 쿼리의 :br_no 와 다른 고정조건값 인가요?
3. 중복 데이터가 존재한다는 것은?
- IN 절의 서브쿼리 결과에 (br_no = :br_no) 인 데이터가 포함되어 있다는 거겠죠?
- 중복을 없애려면 간단하게 서브쿼리에 (br_no != :br_no) 조건 추가하시면 되겠네요.
4. 두번째 쿼리 결과가 첫번째 결과를 포함하고 있으므로
- 두번째 쿼리만 가지고 정렬만 원하는대로 잘하면 됩니다.
SELECT * FROM apple WHERE cust_no = :cust_no AND br_no IN (SELECT br_no FROM banana WHERE all_br_no = '04') -- AND br_no IN (SELECT br_no FROM banana WHERE all_br_no = :br_no) ORDER BY DECODE(br_no, :br_no, 1, 2), br_no ;