联合会影响Vertica SQL的随机性吗
我从vertica数据库的查询中看到了非常奇怪的结果。下面是查询的结构联合会影响Vertica SQL的随机性吗,sql,vertica,Sql,Vertica,我从vertica数据库的查询中看到了非常奇怪的结果。下面是查询的结构 select column_a FROM (...... ....... ORDER BY RANDOM() limit 500 ) proxy UNION (.... ..... ORDER BY RANDOM() limit 500 ) 这是我的奇怪行为。如果我独立运行这两个子查询,它们的结果是随机的。如果我在外部select语句中独立运行这两个子查询,结果将随机化。但是,当我通过上面的查询将结果合并在一起时,结果不再
select column_a
FROM
(......
.......
ORDER BY RANDOM()
limit 500
) proxy
UNION
(....
.....
ORDER BY RANDOM()
limit 500
)
这是我的奇怪行为。如果我独立运行这两个子查询,它们的结果是随机的。如果我在外部select语句中独立运行这两个子查询,结果将随机化。但是,当我通过上面的查询将结果合并在一起时,结果不再随机,数据总是相同的。这对我来说毫无意义,我想不出任何解释
编辑:奇怪的是,一个接一个地更改联合,所有这些都恢复了随机性。我的查询甚至得到了不同的更现实的结果。但这很奇怪,因为当我将两个suquery放入一个
select * from (........
union .............
) GROUP by a HAVING count(a) > 1
无论我运行代码多少次,都不会返回任何结果。所以实际上,他们之间应该没有什么区别
然而,更奇怪的是以下几点。如果我切换子查询的顺序,使第二个在FROM语句中,第一个在UNION语句中,那么现在第二个查询得到随机结果,而第一个查询没有。我的问题进一步演变为:联盟是否通过声明消除了内部秩序?即使这样做实际上会影响结果
分辨率
我不知道为什么这会改变任何事情,但以下解决了这个问题:
选择列a
SELECT *
FROM
(......
.......
ORDER BY RANDOM()
limit 500
) proxy
UNION
(SELECT * FROM (
SELECT ....
.....
ORDER BY RANDOM()
limit 500
) proxy2
)
显然,在union中添加外部select语句可以让sql遵守order by random()语句。如有任何解释,将不胜感激。我开始对sql的结果失去了一点信心 您是否比较了
EXPLAIN
计划?投票结束此问题。如果没有EXPLAIN
计划,就没有足够的信息来尝试形成对正在发生的事情的想法。不幸的是,我不愿意发布解释计划,数据库不是我的,也不想透露有关专栏的任何信息。您比较了EXPLAIN
计划吗?投票结束这个问题。如果没有EXPLAIN
计划,就没有足够的信息来尝试形成对正在发生的事情的想法。不幸的是,我不愿意发布解释计划,数据库不是我的,也不想透露有关列的任何信息