#title 테이블 한 번만 읽기1 [[TableOfContents]] 본 홈페이지에 다음과 같은 [http://databaser.net/boards/bbs.php?table=qa&query=view&uid=501&p=1 질문]이 올라왔다. {{{ 질문을 자주 드리게 되네요..^^;; 아래와 같은 테이블이 있을때co1의 값에 대해서 co2 의 값이 'a' 이고 co3의 값이 'c'인 데이타가 있을 경우 해당 데이타를 추출하도록 한 쿼리 입니다. 전 아무리 생각을 해봐도 두번을 읽어야 가능하겠더라구요.. 아래 쿼리를 테이블을 1번만 읽고 데이타 추출이 가능한지 알고 싶습니다. --테이블 만들기 create table abc ( co1 varchar(100) not null, co2 varchar(100) not null, co3 varchar(100) not null, ) --데이타 넣기 insert abc values('a', 'a', 'c') insert abc values('a', 'b', 'd') insert abc values('z', 'a', 'd') insert abc values('a', 'c', 'd') insert abc values('h', 'a', 'c') insert abc values('d', 'a', 'd') insert abc values('b', 'a', 'd') insert abc values('d', 'c', 'd') insert abc values('c', 'd', 'a') insert abc values('h', 'a', 'd') insert abc values('h', 'b', 'c') insert abc values('a', 'a', 'd') insert abc values('a', 'a', 'e') insert abc values('k', 'a', 'c') insert abc values('k', 'a', 'd') insert abc values('m', 'b', 'c') insert abc values('z', 'a', 'c') insert abc values('n', 'a', 'c') --실행쿼리 select * from abc where co1 in ( select co1 from abc where co2 = 'a' and co3 = 'c' ) and co2 = 'a' order by 1 }}} ==== 풀이 ==== {{{ --대충 이렇게 하면 될듯.. select co1,co2,co3 from ( select * , case when co2+co3 like '[a][c]' then co1 end co4 , row_number() over(partition by co1 order by co1,co2,co3 ) rowno from abc where co2 = 'a' ) t where (co4 is not null or rowno <> 1) }}}