2012-06-20 3 views
1

I예기치 않은 데이터베이스 출력

SELECT 
     r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID, 
     ra.BEZEICHNUNG AS raumBEZEICHNUNG, ra.ID AS raumID 
FROM 
     RAUM r 
     INNER JOIN RAZUORDNUNG rz ON rz.RAUM_ID = r.ID 
     INNER JOIN RAUMATTRIBUTE ra ON rz.RAUMATTRIBUTE_ID = ra.ID 

WHERE 
     RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) 
AND STADT_ID = ISNULL(@Stadt_ID, STADT_ID) 
AND GEBAEUDE_ID = ISNULL(@Gebaeude_ID, GEBAEUDE_ID) 
AND REGION_ID = ISNULL(@Region_ID, REGION_ID) 
AND RAUMATTRIBUTE_ID = ISNULL(@Raumattribute_ID, RAUMATTRIBUTE_ID)  

다음 SQL 쿼리를해야하지만 뭔가가 잘못이라고 생각합니다. 예를 들어

는 :

나는 브라우저에서 RAUMKLASSE_ID 텍스트 필드에 three을 넣어 그것은 단지 하나의 방을 돌려 내 메소드를 호출합니다. 그러나 ID가있는 방이 6 개 있습니다. 이 올바른지 여섯 개 개의 객실을 반환

SELECT 
     r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID 
FROM 
     RAUM r 
WHERE 
     RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) 
AND STADT_ID = ISNULL(@Stadt_ID, STADT_ID) 
AND GEBAEUDE_ID = ISNULL(@Gebaeude_ID, GEBAEUDE_ID) 
AND REGION_ID = ISNULL(@Region_ID, REGION_ID) 
AND RAUMATTRIBUTE_ID = ISNULL(@Raumattribute_ID, RAUMATTRIBUTE_ID) 

: 이상한 것은이 같은 두 INNER JOINSELECT의 두 번째 줄을 제거하면 있다는 것입니다. 내 질문에 어떤 문제가 있는지 알 수 없습니다. 누군가가 저를 도울 수 있습니까? 사전

+0

에만 6 개의 객실 중 하나가 다른 두 테이블에 데이터를 관련이 있기 때문에? –

+0

두 개의 'JOIN'을 'LEFT JOIN'으로 설정하면 어떻게됩니까? –

+0

INNER JOIN과 같은 동작 – Paks

답변

3

이것은 예상 된 동작 이후 :

FROM RAUM r 
INNER JOIN RAZUORDNUNG rz ON rz.RAUM_ID = r.ID 
INNER JOIN RAUMATTRIBUTE ra ON rz.RAUMATTRIBUTE_ID = ra.ID 

는 당신에게 테이블에서 발견되는 경우에만 객실을 얻을 것이다 RAUM, RAZUORDNUNGRAUMATTRIBUTE 테이블이 INNER JOIN의를 제거하는 것은 당신에게 모든 객실을 얻을 것이다 당신의 조건을 만족 RAUM 테이블은 JOIN들에 대한 자세한 내용은 다음 페이지를 확인 :

+1

예와 동일한 동작을합니다. 그것은 "잘못된"결과가 아니라 "예상치 않은"결과입니다. – TomTom

+0

@TomTom, 죄송합니다, 고정되어 있습니다. –

+0

아, 이제 문제를 이해합니다. 그러나 RAZUORDNUNG과 RAUMATTRIBUT 테이블에없는 방을 어떻게 반환 할 수 있습니까? – Paks

2

INNER에서

덕분에 더 RAZUORDNUNG 또는 RAUMATTRIBUTE에 대응 한 RAUM 항목을 반환하지 않습니다 가입하세요. 대신 LEFT JOIN이 필요할 수 있습니다. 이 경우 raumBEZEICHNUNG 및 raumID는 반환 된 집합에서 null 일 수 있습니다.

+0

대신 LEFT JOIN을 시도했지만 INNER JOIN – Paks

관련 문제