oracle 에서 union 은 전혀 연관없는 테이블들을 합집합의 결과값을 알려준다.


select a,b from A

union

select c,d from B


결과값은

a(a+c), b(b+d)의 결과값을 출력하게 된다.


대신 타입도 확인도 같이해서 써야한다. 

a 컬럼이 number 타입이고 c컬럼이 varchar2 타입이라면 타입이 달라서 조건이 위배된다.




 

예시코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT AA.TEST_CD, AA.TEST_NM 
    FROM    
        (    
            SELECT 
                    A.TEST_CD AS TEST_CD,
                    A.TEST_NM AS TEST_NM 
            FROM    TEST A
            WHERE A.TEST_CD = NVL(#sub_test_cd#, #test_cd#)
            
            UNION ALL
            
            SELECT   
                    B.SAMPLE_CD AS TEST_CD,
                    B.SAMPLE_NAME AS TEST_NM
            FROM SAMPLE B
cs
 


1
2
3
4
5
6
7
8
9
<isNotEmpty property="srchBusType">
            <isEqual property="srchBusType" compareValue="1">
            INTERSECT (SELECT A.TEST_CD, A.TEST_NM FROM TEST A)
            </isEqual>
            
            <isEqual property="srchBusType" compareValue="2">
            INTERSECT (SELECT B.SAMPLE_CD, B.SAMPLE_NAME FROM SAMPLE B)
            </isEqual>
</isNotEmpty>
cs




하지만 문구에따라 union으로 걸어진 값중에서 조건에 따라 어떨때는 A테이블만 어떨때는 B 테이블만 결과값을 가져오고 싶다면


INTERSECT 라는 문법을 이용하여 빼내올수 있다.








참고 주소: http://www.gurubee.net/lecture/1507


'ORACLE' 카테고리의 다른 글

[Oracle] group by 에 대한 고찰.  (0) 2019.03.08
[Oracle] 만 나이 구하기  (0) 2018.02.28
[ORACLE] 1이하의 소수점 처리  (0) 2017.09.21

+ Recent posts