오라클 union all 질문드려요 0 5 967

by 하나둘셋 [SQL Query] [2017.03.14 16:54:05]


안녕하세요 제가 하고싶은 질문은

 

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을 쓰면 두개 쿼리가 합쳐져서 정렬되서 나오구..

혹시 다른 방법 없나요? 

무조건 첫번째 쿼리가 제일먼저 출력되고 두번째 쿼리가 출력되야해요...  

도와주세요ㅜㅜ

 

by 마농 [2017.03.14 17:04:32]

0. 쿼리를 잘못 올려주신 듯 하네요.
  - 정확한 쿼리와 결과를 보여주세요.
1. 위,아래 쿼리의 조건이 서로 상반되는데
  - 중복 자료가 나올리가 없을 것 같구요.
2. 위,아래 쿼리의 정렬기준이 다른데
  - 이게 맞는지?
3. 위 쿼리 정렬 기준이 검색조건과 동일한데?
  - 단일값 정렬은 무의미한 듯.


by 하나둘셋 [2017.03.14 17:22:31]

0.쿼리 수정했어요!예시로 든 쿼리라...

1.첫번째 쿼리 결과는 예시로 1,2,3

두번째 쿼리 결과는 5,6,1,2,3이거든요 

제가 출력하고싶은 결과값은

1,2,3,5,6이거든요...

두번째 쿼리는 첫번째 쿼리에서 중복된건 빼고 출력이요

네 정렬이 달라요 

 


by 마농 [2017.03.14 17:32:04]

IN 절의 서브쿼리가 필요한지 의문이네요?
banana 없이 바로 apple 에 (br_no ='04') 조건을 주면 되는 것 아닌지요?


by 하나둘셋 [2017.03.14 18:04:25]

아뇨 서브쿼리 다시 수정할게용

 

(select br_no from banana where all_br_no =:br_no)

 


by 마농 [2017.03.15 08:51:32]

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
;

 

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