我正在使用下面的查询来检索偶数记录。但在结果中它没有显示任何行
select ename,job from emp where mod(rownum,2)=0;
为什么 mod(rownum,2) 在 where 条件下不起作用
您还可以给出选择奇数记录的查询吗
这个查询有什么问题吗?
请提出建议..
它不起作用,因为:对于第一行ROWNUM
is 1
并且,在这种情况下,MOD(ROWNUM,2)
is 1
自从你的WHERE
声明是MOD(ROWNUM,2)=0
那么这减少到1=0
并且该行被丢弃。然后将针对后续行进行测试ROWNUM
1(因为前一行不再出现在输出中并且没有行号),这将再次使测试失败并被丢弃。重复,令人作呕,所有行都失败了WHERE
测试并被丢弃。
如果您尝试使用这种方式获取奇数行WHERE MOD(ROWNUM,2)=1
那么它将仅返回第一行,第二行和后续行将无法通过测试,并且永远不会包含在查询中。
正如 Vijaykumar Hadalgi 所建议的,您需要在子查询中选择 ROWNUM(它可以对所有行进行编号,而无需使用 where 子句来限制它),然后在外部查询中执行测试来限制行:
SELECT ename, job
FROM (
SELECT ename,
job,
ROWNUM AS row_id -- Generate ROWNUM second.
FROM (
SELECT ename, job
FROM Emp
ORDER BY ename -- ORDER BY first.
)
)
WHERE MOD( row_id, 2 ) = 0; -- Filter third.
SQLFIDDLE http://sqlfiddle.com/#!4/c4e63/595
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)