【发布时间】:2014-08-20 11:08:02
【问题描述】:
我是 sql 的初学者,我想知道您是否可以帮助我弄清楚如何从 Oracle 中检索随机记录。我有以下查询:
SELECT p.* from data p where p.id in
(SELECT DISTINCT t.id FROM DATA t, comment c, PTV ptv
WHERE t.code not in ('x','y','Z')
and t.id = c.id(+) and ptv.code = t.code and ptv.code = t.code
and ptv.version = t.version AND t.TASK_CODE != 'DRAFT')
如何从上述查询返回的结果中选择 X 条随机记录?任何建议将不胜感激。
【问题讨论】:
-
Join Func 就可以了。
-
不相关,但是:停止在 where 子句中使用隐式连接 尤其是 用于外部连接(
(+)运算符)。使用显式JOIN或LEFT JOIN运算符。甚至 Oracle 也建议停止使用(+)运算符。 -
附注。 @a_horse_with_no_name 其实使用oracle native(不是ANSI)join语法并没有错,在某种程度上只是个人喜好问题。 ANSI 连接是否提供了更清晰、更容易并允许您编写更便携的语句?是的。我个人确实更喜欢 ANSI 连接语法而不是传统的连接语法。但无论如何,优化器最终会将 ANSI 语法转换为传统语法。
-
@NicholasKrasnov:您是对的,使用已被更新的标准取代的 20 年前的语法并没有什么“错误”。显式
JOIN运算符的一个优点是您不会因为忘记连接条件而意外创建交叉连接。另外,与LEFT JOIN运算符相比,(+)运算符不能做一些事情(正如我所说:Oracle 建议不要再使用(+)) -
@Nicholas Krasnov 不正确。 Oracle 曾说过,一些较新的优化器结构只能用于新的语法。 (但相反——如果我没记错的话——在某些特殊情况下你只能使用(+))。
标签: sql database oracle random