Union会影响随机性Vertica SQL

时间:2015-07-15 22:23:31

标签: sql vertica

我从vertica数据库的查询中看到了非常奇怪的结果。这是查询的结构

select column_a
FROM
(......
.......
ORDER BY RANDOM()
limit 500
) proxy
UNION
(....
.....
ORDER BY RANDOM()
limit 500
)

这是我得到的奇怪行为。如果我独立运行两个子查询,它们的结果是随机的。如果我在外部select语句中独立运行两个子查询,则结果是随机的。但是,当我通过上面的查询选择结果将它们组合在一起时,结果不再是随机的,数据总是相同的。这对我来说没有意义,我想不出任何解释。

编辑:奇怪的是,将union更改为union会恢复随机性。我的查询甚至得到了更加真实的结果。这很奇怪,因为我将两个suqueries放入:

select * from (........
union .............
) GROUP by a HAVING count(a) > 1

无论我运行代码多少次,都不会返回任何结果。因此,他们应该没有区别。

甚至STRANGER的内容如下。如果我切换子查询的顺序,以便第二个在FROM语句中,第一个在UNION语句中,现在第二个查询获得随机化结果而第一个查询没有。我的问题进一步演变为:联盟是否通过陈述删除内部秩序?即使这样做实际上会影响结果吗?

解决

我不知道为什么在世界上这会改变任何东西,但以下修复了问题:

选择column_a

SELECT *
FROM
(......
.......
ORDER BY RANDOM()
limit 500
) proxy
UNION
(SELECT * FROM (
    SELECT ....
    .....
    ORDER BY RANDOM()
    limit 500
    ) proxy2
)

显然在union中添加一个外部select语句会使sql遵循random()语句的顺序。如果有人有任何解释,将不胜感激。开始对我的sql结果失去一点信心。

0 个答案:

没有答案