使用INNER JOIN时,意外的数据库输出(Unexpected database output

2019-07-30 01:23发布

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

但是,我觉得这事是不对的。

例如:

如果我把threeRAUMKLASSE_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)

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

提前致谢

Answer 1:

这是预期的行为,因为:

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:

  • 为Visual解释JOIN小号 。
  • 维基百科的文章有关JOIN小号


Answer 2:

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



文章来源: Unexpected database output when using INNER JOIN