조인관련 질문 0 2 1,673

by pirusira [SQLServer] [2010.05.13 18:32:12]


안녕하세요. 질문할게요

1.
select p.ipaddr as ip, p.model as modelname, sc.statetext, pg.name as groupname
        from printer p, printer_group_info pg, state_code scfrom pe_usage group by printerid
        where p.groupcode=pg.code and p.statcode=sc.code

2.
select printerid, count(pages) 't1', sum(pages) 't2' from pe_usage group by printerid

1과 2를 조인하여

3.
select p.ipaddr as ip, p.model as modelname, sc.statetext, pg.name as groupname, pu.t1, pu.t2
        from printer p, printer_group_info pg, state_code sc, (select printerid, count(pages) 't1', sum(pages) 't2' from pe_usage group by printerid) pu
        where p.groupcode=pg.code and p.statcode=sc.code and p.id=pu.printerid

1번에서 742개의 행이 나옵니다. 그런데 1과 2를 조인한 3은 2의 결과대로 591개밖에 나오지 않습니다.
이것은 조인이 안되는 행은 제외시켜서 그런거죠?
조인 대상 컬럼중 한쪽이 널인경우 조인을 안해서 그런것이기도 하나요?
아무튼 제가 원하는건 아무행도 제외하지 않은 742개의 행이 모두 나오는 것입니다.
t1과 t2의 값이 없는 행은 그 값을 0으로 해서 말입니다.

답변 부탁 드려요..
by pirusira [2010.05.13 18:42:52]
select p.ip, p.modelname, p.statetext, p.groupname, pu.t1, pu.t2
from (select p.id, p.ipaddr as ip, p.model as modelname, sc.statetext, pg.name as groupname
from printer p, printer_group_info pg, state_code sc
where p.groupcode=pg.code and p.statcode=sc.code) p left outer join (select printerid, count(pages) 't1', sum(pages) 't2' from pe_usage group by printerid) pu
on p.id=pu.printerid

이게 맞나요?

by 마농 [2010.05.14 11:38:57]
네. 아우터 조인을 하셔도 되구요.
스칼라 서브쿼리를 이용하셔도 됩니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입