database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 2267 게시물 읽기
No. 2267
내부조인절? 외부조인절?
작성자
초보네
작성일
2005-09-01 12:00ⓒ
2005-09-01 12:02ⓜ
조회수
3,141

안녕하세요.

레프트 조인을 하다보면 ['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

 

긴 질문 읽어 주셔서 감사합니다.

이 글에 대한 댓글이 총 1건 있습니다.

select t.price_set_name, t.price_set, s.book_code, e.price
from
books s
left outer join price e
on s.company_code = e.company_code and s.book_code = e.book_code
left outer join price_set t
on s.company_code = t.company_code
where s.company_code = '5001'

 

 

이렇게 하시면 될거 같은데요

mssql 전용 조인 말구 ansi sql 을 추천 합니다.

혼돈없이 조건이 명확합니다.

 

그럼 수고하세요

 

석이님이 2005-09-01 12:41에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
2270standby database... [1]
mssql
2005-09-02
1776
2269쿼리분석기에서 조건문으로돌리기 [2]
영심이
2005-09-02
1906
2268엔터프라이즈 매니저에 등록된 서버 리스트를 옮기는 법?
dba
2005-09-01
1218
2267내부조인절? 외부조인절? [1]
초보네
2005-09-01
3141
2266데이터가 저장이 안되는 현상에 대해서
이은석
2005-09-01
1354
2265석이님 답변 감사합니다. 한데.. [1]
강동호
2005-09-01
1478
2264특정 필드 값이 들어있는 행들의 갯수와 행 내용을 구하는 방법? [2]
대한
2005-09-01
1863
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다