1. select * from survey where status = 'C' and status IN (select status from survey where favorate = '0') order by favorate desc;
2. select * from survey where status = 'C' and status IN (select _id from survey where favorate = '0') order by favorate desc;
status는 non-primary key 이며 _id는 primary key이다.
위의 두 query 간의 차이는 무엇일까?
1에서의 subselect (IN 이하) 는 결국 하나 이상의 value 들을 return하게 된다. 즉, 1은
select * from survey where status = 'C' and status = 'D' order by favorate desc;
과 같이 바뀔 수 있는 것이다.
때문에 IN이하 query 문의 결과 내에서 다시 검색해서 들어간다고 생각해서는 안된다. 왜냐하면 1에서 subselect인 IN 이하의 query 결과가 'D'가 되었을 때 단지 value 'D'를 return 한 것이며 main select에 그 이상이하(?)의 영향을 주지 않게 되는 것이다.
(부연하면 subselect의 결과 내에서 select를 하는 것이 아니라 subselect가 반환한 value로 select하는 것이다. primary key를 return 한다면 그게그것일 것이다. 하지만 primary key가 아니라면 단지 value를 return하는 것이기에 혼돈이 있어서는 안될 것이다.)
'Papers > Database' 카테고리의 다른 글
Multiple Columns as Primary keys (0) | 2013.08.21 |
---|---|
sql query example (0) | 2013.08.06 |
강의정리 (0) | 2007.10.10 |
첫강의 (0) | 2007.09.16 |