안녕하세요.
레프트 조인을 하다보면 ['xxx' 테이블은 외부 조인 절의 내부
구성원입니다. 테이블이 일반 조인 절과도 관련되어 있는 경우에는 외부
조인 절의 내부 구성원이 될 수 없습니다.] 라는 메세지를 자주
보는데요.. 테이블 두개를 조인할때는 어렵지 않은데.. 3개이상이 된
경우에는 종종 저 메세지와 부딪힙니다.
아무래도 제가 레프트 조인에 대해 제대로 이해를 못하고 있는것
같은데, 아래의 예를 가지고 쉽게 설명 좀 부탁드릴께요. 여기저기
찾아봐도 2개의 테이블로 간단한 레프트 조인의 예는 있는데 3개 이상인
경우에 대해서는 잘 못찾겠습니다.
고수님들 도와주세요~ m(__)m
========================
table books
(
company_code 출판사코드
book_code 책코드
)
table price
(
company_code 출판사코드
price_set 단가종류코드
book_code 책코드
price 가격
)
table price_set
(
company_code 출판사코드
price_set 단가종류코드
price_set_name 단가종류이름
)
* 단가종류코드는 소비자판매단가/대형서점에 판매하는
단가/소형서점에 판매하는 단가
등등으로 나눠집니다. 따라서 책하나에 여러개의 단가가 있을 수
있는 것이죠.
* 다음과 같은 결과를 얻기를 원합니다.
===============+===========+============+========+
price_set_name | price_set | book_code | price |
---------------+-----------+------------+--------+
소비자판매단가 | 0001 | 7003 | 15000 |
---------------+-----------+------------+--------+
소비자판매단가 | 0001 | 2001 | 12000 |
---------------+-----------+------------+--------+
그런데 books 테이블에는 book_code=3001이라는 책이 있는데
price 테이블에는 book_code=3001이라는 책에 대한 단가 정보가
없습니다. 이럴때 다음과 같은 결과를 원합니다.
===============+===========+============+========+
price_set_name | price_set | book_code | price |
---------------+-----------+------------+--------+
소비자판매단가 | 0001 | 7003 | 15000 |
---------------+-----------+------------+--------+
소비자판매단가 | 0001 | 2001 | 12000 |
---------------+-----------+------------+--------+
소비자판매단가 | 0001 | 3001 | null |
---------------+-----------+------------+--------+
이럴때 다음과 같이 쿼리하면
위의 외부조인절 구성원이 어쩌고 하는 메세지가 나오는데 무엇이
잘못된 것일까요?
select t.price_set_name, t.price_set, s.book_code, e.price
from books s, price e, price_set t
where s.company_code = '5001'
and s.company_code *= e.company_code
and s.company_code *= t.company_code
and s.book_code *= e.book_code
and e.price_set = t.price_set
긴 질문 읽어 주셔서 감사합니다.
|