1

次のSQLクエリがあります

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)     

しかし、それは何かがおかしいと思います。

例えば:

threeブラウザのテキストフィールドにRAUMKLASSE_ID入力してメソッドを呼び出すと、1つの部屋のみが返されます。しかし、そのIDを持つ部屋は6つあります。INNER JOIN奇妙なことに、次のように、私の2行目と2行目を削除すると次のSELECTようになります。

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)

それは正しい6つの部屋を返しています。クエリの問題が何であるかわかりません。多分誰かがそれで私を助けることができますか?

前もって感謝します

4

2 に答える 2

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にある部屋のみを取得します。これらを削除すると、条件を満たすすべての部屋がテーブルから取得されます。sの詳細については、次のページを確認してください。RAZUORDNUNGRAUMATTRIBUTEINNER JOINRAUMJOIN

于 2012-06-20T07:53:10.193 に答える
2

INNER JOINは、対応するRAZUORDNUNGまたはRAUMATTRIBUTEがないRAUMエントリを返しません。代わりにLEFTJOINが必要になる場合があります。この場合、raumBEZEICHNUNGとraumIDは、返されるセットでnullになる可能性があります。

于 2012-06-20T07:52:51.400 に答える