我有以下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)
它正在返回六个房间,这是正确的。我不知道我的查询有什么问题。也许有人可以帮我这个?
提前致谢
答案 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
只会为您提供表RAUM
,RAZUORDNUNG
和RAUMATTRIBUTE
表格中的房间,删除这些INNER JOIN
将获得所有房间RAUM
表符合您的条件,请查看这些页面以获取有关JOIN
s:
答案 1 :(得分:2)
INNER JOIN不会返回没有相应RAZUORDNUNG或RAUMATTRIBUTE的RAUM条目。你可能需要LEFT JOIN;在这种情况下,raumBEZEICHNUNG和raumID在返回的集合中可能为null。