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文本字段并调用我的方法,它只会返回一个房间。但是有六个房间有那个ID。奇怪的是,如果我删除我的两INNER JOIN行和第二行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)

它是返回六间房间,这是正确的。我不知道我的查询有什么问题。也许有人可以帮助我?

提前致谢

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  

只会让您找到在 tables 中找到的房间RAUMRAZUORDNUNG并且RAUMATTRIBUTEtables,删除这些INNER JOINs 将从RAUMtable 中获得满足您条件的所有房间,请查看这些页面以获取有关JOINs 的更多详细信息:

于 2012-06-20T07:53:10.193 回答
2

INNER JOIN 不会返回没有相应 RAZUORDUNG 或 RAUMATTRIBUTE 的 RAUM 条目。您可能需要 LEFT JOIN 代替;在这种情况下,返回集中的 raumBEZEICHNUNG 和 raumID 可能为空。

于 2012-06-20T07:52:51.400 回答