테이블이 TB1하고 TB2가 있는데
TB1테이블 조회 조건으로 조회가 안될 때 TB2테이블의 일부 값으로 출력되게끔 하고싶음
그래서 내가 아는 지식을 총 동원해서 찾은게
SELECT CASE WHEN A.XXX IS NULL THEN B.XXX END AS XXX
.....
FROM
TB1 RIGHT OUTER DUAL A ON XXX=XXX,
(SELECT ... FROM TB2 RIGHT OUTER JOIN DUAL ON XXX = XXX) B
이라는.방식인데...
OUTER JOIN을 안쓰고 하는 방법은 없을까..?
11개의 댓글
무분별한 사용은 차단될 수 있습니다.
pangloss
case문 안에서 서브쿼리를 돌리면?
단, 이 경우 서브쿼리에서 2개 이상의 행이나 null이 나오지 않도록 신경은 써줘야함
안철수
나도 생각해봐도 이게 맞는거같음
CASE문으로 조회 조건으로 조회가 될때는 TB1데이터, 안될떄는 TB2 데이터 하면 되겠지
Tbps
근데.조회가 안되면 값 자체가 안나와서 0개의 행이 출력되는데 어떻게 case비교해야해??
pangloss
저 밑에 누가 잘 써줬네 서브쿼리에 nvl 써
Tbps
조회조건이 안맞으면 NVL자체가 안먹혀서그래... ㅜㅜ
pangloss
tb1쪽이 null일때? CASE WHEN TB1.AAA IS NULL THEN (SELECT NVL(TB2.AAA) FROM TB2 WHERE.....) ELSE EXPR END 하면 될텐데
Tbps
기본키 기준으로 조회했을 때 아무것도 없으면 빈 행도 안나오더라구...
NULL이라도 나오던걸로 기억하는데 ㅜㅜ
그냥 빈 테이블 취급함...
pangloss
https://geunsik.tistory.com/384
이거 참고
Tbps
나도 이거보고 본문 쿼리 짠거였음 ㅋㅋㅋ;; 그래서 그냥 조인넣기로함
기기기깈ㅋ
유니온 올 쓰면 안되낭?
귀여운놈들
SELECT T.XXX FROM (
SELECT NVL(TB1.XXX, TB2.XXX) AS XXX
FROM TB1 A, TB2 B
WHERE A.XXX = B.XXX(+)
AND .....
) T
OR
SELECT DECODE(NVL(TB1.XXX,''),'',(SELECT TB2.XXX FROM TB2 WHERE TB1.XXX = TB2.XXX AND ROWNUM