2012-06-14 50 views
2

我有以下SQL查詢:獲得「多部分組成的標識符和RAUM.ID;無法綁定」 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) 

如果我使用該查詢我得到一個錯誤:

The multi-part identifier &RAUM.ID; could not be bound.`

這是爲什麼,我該如何解決這個問題?

+0

PLease格式化查詢,使其更容易閱讀,無需滾動即可閱讀,也可以將舊連接語法與新文本混合! –

回答

4

既然你(在FROM RAUM r)定義的表的別名爲你的餐桌RAUM,您需要使用該表的別名 - 所以使用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只是用英文逗號分隔的表 - 使用正確的ANSI INNER JOIN語法來代替:

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 rRAUMATTRIBUTE ra之間的連接狀態 - 基本上,所以你獲得CROSS JOIN(笛卡爾產品)。那是你要的嗎?如果不是,請在INNER JOIN語句中定義正確的JOIN條件。

+0

第一個表:RAUM:ID ,Bezeichnung 第二個表:Razuordnung:ID ,Raum_ID ,Raumattribute_ID 三表:Raumattribute:ID ,Bezeichnung – Paks

+0

@Paks :好的,所以完全不需要額外的以逗號分隔的'RAUMATTRIBUTE'。更新我的改編後的查詢 - 是否返回你所需要的? –

+0

Thx尋求幫助。最後它的工作原理:) – Paks

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) 
+0

我試過了,但得到了同樣的錯誤.. – Paks

0
. 
FROM RAUM r, RAUMATTRIBUTE ra 
INNER JOIN RAZUORDNUNG ON RAZUORDNUNG.RAUM_ID = RAUM.ID 
. 

RAUM是不是?

+0

是的,我知道,我嘗試了內部加入RAZUORDNUNG上RAZUORDNUNG.RAUM_ID = r.ID,之前我把我的問題放在這裏,但得到相同的錯誤。我不知道爲什麼 – Paks

相關問題