使用INNER JOIN时出现意外的数据库输出

时间:2012-06-20 07:44:40

标签: c# sql sql-server-2008

我有以下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)

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

提前致谢

2 个答案:

答案 0 :(得分:3)

这是预期的行为,因为:

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

只会为您提供表RAUMRAZUORDNUNGRAUMATTRIBUTE表格中的房间,删除这些INNER JOIN将获得所有房间RAUM表符合您的条件,请查看这些页面以获取有关JOIN s:

的更多详细信息

答案 1 :(得分:2)

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