2

次のSQLクエリがあります。

SELECT 
   r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID, ra.BEZEICHNUNG AS raumBEZEICHNUNG, 
   ra.ID AS raumID 
FROM RAUM r, RAUMATTRIBUTE ra 
INNER JOIN RAZUORDNUNG ON RAZUORDNUNG.RAUM_ID = RAUM.ID
INNER JOIN RAUMATTRIBUTE ON RAZUORDNUNG.RAUMATTRIBUTE_ID = RAUMATTRIBUTE.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)

そのクエリを使用すると、エラーが発生します。

マルチパート識別子&RAUM.ID; バインドできませんでした。`

それはなぜですか、どうすればこれを修正できますか?

4

3 に答える 3

4

RAUM(で)テーブルのテーブルエイリアスを定義したので、FROM RAUM rそのテーブルエイリアスを使用する必要があります。r.ID代わりにを使用してください。RAUM.ID

SELECT 
   r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID, ra.BEZEICHNUNG AS raumBEZEICHNUNG, 
   ra.ID AS raumID 
FROM RAUM r, RAUMATTRIBUTE ra   <== you're defining "r" to be alias for "RAUM"
INNER JOIN RAZUORDNUNG ON RAZUORDNUNG.RAUM_ID = RAUM.ID  <== you need to use "r.ID"
......  

さらに、コンマ区切りのテーブルだけの「古いスタイル」のJOINの使用をやめることを強くお勧めします。代わりに、適切なANSIINNERJOIN構文を使用してください。

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)

RAUM rとの間のJOIN条件を定義していないRAUMATTRIBUTE raため、基本的にCROSS JOIN(デカルト積)を取得します。それはあなたが望むものですか?INNER JOINそうでない場合:ステートメントで適切なJOIN条件を定義します。

于 2012-06-14T07:58:17.210 に答える
1

さて、あなたは最初の内部結合をr.Idに変更する必要があります:

    SELECT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID, ra.BEZEICHNUNG AS raumBEZEICHNUNG, ra.ID AS raumID FROM RAUM r, RAUMATTRIBUTE ra 
INNER JOIN RAZUORDNUNG ON RAZUORDNUNG.RAUM_ID = r.ID
 INNER JOIN RAUMATTRIBUTE ON RAZUORDNUNG.RAUMATTRIBUTE_ID = RAUMATTRIBUTE.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)
于 2012-06-14T07:57:08.177 に答える
0
.
FROM RAUM r, RAUMATTRIBUTE ra 
INNER JOIN RAZUORDNUNG ON RAZUORDNUNG.RAUM_ID = RAUM.ID
.

RAUMはrですよね?

于 2012-06-14T07:58:26.657 に答える