회사에서 조인(JOIN)을 하려 하는데 조건 없이 조인해야 했습니다.
보통 SQL에서 조인할 때 아래와 같은 형식으로 합니다.
SELECT (Distinct) Column, Column, Column
FROM 첫번째 Table Name
LEFT/RIGHT JOIN 두번째 Table Name
ON 조인 조건
여기서 ON 부분이 문제였는데 제가 하려고 했던 테이블에서는
생각해보면 아래처럼 WHERE 부분으로도 해결할 수 있지만
SELECT (Distinct) Column, Column, Column
FROM 첫번째 Table Name
두번째 Table Name
WHERE 검색 조건
첫 번째 테이블과 두 번째 테이블이 연관되는 것이 없었습니다.
어떤 상황이었는지 예를 들면
상품정보 테이블 A
상품 | 판매 금액 |
냉장고 | 150만원 |
진공 청소기 | 100만원 |
노트북 | 200만원 |
생산연도 테이블 B
생산연도 |
2017 |
2018 |
2019 |
결과
생산연도 | 상품 | 판매금액 |
2017 | 냉장고 | 150만원 |
2017 | 진공 청소기 | 100만원 |
2017 | 노트북 | 200만원 |
결과 테이블처럼 값을 뽑아 내고 싶었습니다.
1.CROSS JOIN
SELECT A.상품, A.판매금액, B_TMP.생산연도 FROM A CROSS JOIN (SELECT 생산연도 FROM B ORDER BY 생산연도 ASC FETCH FIRST 1 ROWS ONLY) AS B_TMP
2.조인안하고 FROM 에서 조건
SELECT A.상품, A.판매금액, B_TMP.생산연도 FROM A, (SELECT 생산연도 FROM B ORDER BY 생산연도 ASC FETCH FIRST 1 ROWS ONLY) AS B_TMP
3. ON 조건 없이 조인하는 방법
SELECT A.상품, A.판매금액, B_TMP.생산연도 FROM A INNER JOIN (SELECT 생산연도 FROM B ORDER BY 생산연도 ASC FETCH FIRST 1 ROWS ONLY) AS B_TMP ON 1 = 1
ON 1=1 나는 이 답을 찾는데 긴 시간이 걸린 건 아니었습니다만 답이 정말 간단해서 아주 놀라웠습니다.
4. 셀렉을 두 번 하는 방법
SELECT A.상품, A.판매금액, (SELECT 생산연도 FROM B ORDER BY 생산연도 ASC FETCH FIRST 1 ROWS ONLY) AS 생산연도 FROM A
'DB > Oracle' 카테고리의 다른 글
오라클에서 처리중인 SQL 쿼리문 진행상황 확인 (2) | 2019.06.22 |
---|---|
DATA PUMP 데이터베이스 IMPDP 하는 방법(DMP 임포트) (0) | 2019.06.01 |
DATA PUMP 데이터베이스 EXPDP 하는 방법(DMP 파일 만드는 방법) (0) | 2019.05.23 |
오라클 DATA PUMP (EXPDP / IMPDP) 하기전 디렉터리 추가, 조회, 삭제, 권한설정 방법 (0) | 2019.05.22 |
오라클 테이블 전체 삭제 팁 (1) | 2019.04.19 |
댓글