我从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结果失去一点信心。