使用UNION为SELECT语句添加参数会更改记录号

时间:2014-01-31 20:28:30

标签: sql oracle

当我在SELECT的{​​{1}}子句中添加新参数时,我会得到更多记录......这怎么可能?是UNION只是将它们混合在一起吗?例如:

编辑:他们绝对不同。 UNION列是“IN”或“OUT”,这就是我用来分隔两者的。

EDIT2:UNION ALL给了我80条记录,就像它应该的那样,但它很奇怪,因为我的两个SELECT语句绝对不同。

最终编辑:最终问题是我的一个SELECT语句中的记录不是DISTINCT,而是在两个SELECT语句之间。谢谢大家。

code

4 个答案:

答案 0 :(得分:5)

UNION更改为UNION ALL,您应该得到相同的结果。 UNION选择不同的行,UNION ALL应选择所有行。

答案 1 :(得分:3)

默认情况下,UNION选择不同的结果,结果集之间必须有重复。

答案 2 :(得分:0)

union all将解决您的问题,如前一个答案所述,它仅选择不同的值

参考Oracle docs.

答案 3 :(得分:-3)

当你在两组之间进行联系时,

union就像一个产品

x1,x2  and  y1,y1

你会得到一个笛卡尔积:

x1,y1
x1,y2
x2,y1
x2,y2

我想你想加入,所以你可以这样做:

SELECT
       f.key
     , f.date
     , f.code
     , f.cost
  FROM a.fact f
JOIN
SELECT
       f2.key
     , f2.date
     , f2.code
     , f2.cost
  FROM a.fact2 f2
ON f.key = f2.key

希望很清楚