我试图从ID
的{{1}}中选择a
,b
,DatabaseAlpha
,以及{与IS_CURRENT = 'y'
相同的DatabaseBravo
,其字段ID
。我之所以使用DatabaseAlpha
,是因为IS_CURRENT = 'Y'
中的所有LEFT JOIN
将在ID
中具有一个对应的位置。但并非DatabaseBravo
中的所有DatabaseAlpha
都将在ID
中启用(因此,我希望DatabaseAlpha
在右侧的查询中返回)。每个DatabaseBravo
只有一个NULLS
实例(但多个IS_CURRENT = 'Y'
)。
我有一个查询,如下所示:
ID
但是,结果不是我想要的。该查询显示了多个条目,它们来自我的IS_CURRENT = 'N'
表中的SAME SELECT ID, a, b
FROM DatabaseAlpha x
LEFT JOIN DatabaseBravo y ON x.ID = y.ID
AND x.IS_CURRENT = 'Y'
AND y.IS_CURRENT = 'Y'
和来自ID
的{{1}},同时具有DatabaseAlpha
和NULL
。
例如,取DatabaseBravo
。 IS_CURRENT = 'Y'
中有6个条目带有此IS_CURRENT = 'N'
,而ID = 357
中有0个条目。在6个条目中,其中5个具有DatabaseAlpha
,只有一个具有ID
。我想要的结果仅是带有DatabaseBravo
的条目才能返回此ID。但是,该查询的实际结果是返回了所有6个条目,包括表示IS_CURRENT = 'N'
的条目。
我尝试过三种方式更改查询,但都失败了:
IS_CURRENT = 'Y'
我做错了什么还是没在这里看到吗?
答案 0 :(得分:4)
您需要将部分join
条件移至where
条件:
SELECT ID, a, b
FROM DatabaseAlpha x
LEFT JOIN DatabaseBravo y on x.ID = y.ID and y.IS_CURRENT = 'Y'
WHERE x.IS_CURRENT = 'Y'
这将返回DatabaseAlpha
表中与is_current = 'Y'
匹配的所有记录,并且由于您使用的是outer join
,因此仅返回与join
条件匹配的记录来自DatabaseBravo
,在这种情况下也来自is_current = 'Y'
。