2010-08-18 4 views
0

다른 테이블에 내부 조인을 사용하는 쿼리가 있는데 다른 테이블에 포함 된 레코드도 포함하고 싶습니다.두 개의 다른 테이블을 기반으로 레코드 선택

예 :이

select name, address from table1 
inner join table2 on table1.id = table2.id 

, 나는 또한 table1.recno = (1,2,4)가있는 행을 포함 할.

어떻게 쿼리를 작성할 수 있습니까?

내가 아는 한 가지 옵션은 첫 번째 테이블 조인 대신 IN 키워드를 사용하는 것입니다. 그러나 우리 고객은 IN 키워드를 사용하고 싶지 않습니다.

+0

@Jenn이 - 당신이 존재, (아주 이상한 요구 사항을 사용할 수 있습니다 - 않습니다 IN을 사용하지 마십시오) –

+0

올바르게 기억한다면 IN을 사용하지 않는 이유가있을 수 있습니다. "IN"은 전체 테이블을 스캔하는 반면, EXISTS를 사용하는 것은 일치하는 레코드가 발견되는 즉시 중지합니다. 나는 그것을 어디에서 읽었는지, 소스가 얼마나 신뢰할 수 있는지를 기억할 수 없다. 그래서 나는 완전히 틀릴 수도있다. –

+1

'IN'은 (a = 1 OR a = 2 OR a = 4)에 대한 구문 적 설탕이다. 그것을 사용하지 않는 것은 마우스가없는 PC를 사용하는 것과 같습니다. – cjk

답변

1

왼쪽 조인을 사용하고 WHERE 절을 사용하여 필요한 행을 필터링하십시오. 당신이 바보 이유로 무해한 IN을 피하려면

select name, address 
from table1 
    left join table2 on table1.id = table2.id 
where 
    table2.id IS NOT NULL OR table1.ID In (1,2,4) 

가 아니면 사용 : 당신처럼하지 않는 경우

select name, address 
from table1 
    left join table2 on table1.id = table2.id 
where 
    table2.id IS NOT NULL 
    OR table1.ID = 1 
    OR table1.ID = 2 
    OR table1.ID = 4 
+0

[인용] 내가 아는 한 가지 옵션은 첫 번째 테이블 조인 대신 IN 키워드를 사용하는 것입니다. 그러나 우리 고객은 IN 키워드를 사용하고 싶지 않습니다. [/ quote] – jigfox

+0

@jigfox, Jenn입니까? –

+0

아니, 왜 그렇게 생각하니? – jigfox

관련 문제