"in"대신 "exists"를 사용하는 것을 (어제) 배웠습니다.SQL - 테이블 별칭 범위
BAD
select * from table where nameid in (
select nameid from othertable where otherdesc = 'SomeDesc')
GOOD
select * from table t where exists (
select nameid from othertable o where t.nameid = o.nameid and otherdesc = 'SomeDesc')
그리고 나는 이것에 대해 몇 가지 질문이 있습니다
1) 내가했다 이해로 설명 : 만 일치하는 값이 대규모을 구축하는 대신 반환되기 때문에 는 "이 더 나은 이유는 가능한 결과 목록 ". 첫 번째 하위 쿼리가 900 개의 결과를 반환하는 반면 두 번째 하위 쿼리는 1 (예 또는 아니요) 만 반환한다는 의미입니까?
2) 과거에는 "처음 1000 행만 검색 할 수 있습니다"라는 RDBMS가있었습니다.이 두 번째 방법으로 문제를 해결할 수 있습니까?
3) 두 번째 하위 쿼리의 별칭 범위는 무엇입니까? ... 별칭은 괄호 안에 만 있습니까? I 번째에서 (표 othertable위한 O) 동일한 가명을 사용하는 경우
select * from table t where exists (
select nameid from othertable o where t.nameid = o.nameid and otherdesc = 'SomeDesc')
AND
select nameid from othertable o where t.nameid = o.nameid and otherdesc = 'SomeOtherDesc')
인지, "존재"예
그것은 제 존재에 문제를 제시 할 것인가? 아니면 완전히 독립적입니까?
오라클과 관련된 것이거나 대부분의 RDBMS에 유효합니까?
감사
"존재"... 서로 호환되지 않습니다 "있다". – Constantin
두 번째 쿼리는 구문 분석하지 않습니다. 텍스트에 "두 번째 존재"가 표시되므로 'AND 존재 여부 (AND는? – philipxy