0

我有一个 SQL 查询,它由两个联合在一起的 SELECT 语句组成。当它们单独运行时,第一个 SELECT 返回 10 条记录,第二个 SELECT 返回 1 条记录,所以当我联合这两个 SELECT 时,我希望返回 11 条记录,但事实并非如此,我只得到 9 条记录。

由于 SQL 的性质,我实际上无法在此处发布它,但它包含跨 5 个表的大量 JOINS。返回的所有内容都是正确和有效的。

只是想知道是否有人在 UNION'ing 两个 SELECT 语句时看到过这个问题,以及是否有人对可能是什么原因有任何建议,甚至可以为我指明正确的方向,谢谢。

4

3 回答 3

3

UNION默认删除重复项。为防止删除重复项,应使用UNION ALL 。

引用文档:

UNION 的默认行为是从结果中删除重复的行。可选的 DISTINCT 关键字除了默认值之外没有任何作用,因为它还指定重复行删除。使用可选的 ALL 关键字,不会发生重复行删除,结果包括所有 SELECT 语句中的所有匹配行。

于 2013-03-22T10:31:15.260 回答
0

默认情况下,Oracle 将隐式 distinct 子句应用于联合的结果。您可能需要检查单独查询的结果是否包含常见项目。

如果您不希望出现这种行为,则需要改用 UNION ALL 子句。

于 2013-03-22T10:30:07.363 回答
0

尝试使用UNION ALL而不是仅UNION. UNION 只返回不同的行。看看这个

于 2013-03-22T10:30:11.160 回答