昨天发现一个很奇怪的现象,我在分页时的SQL明明是6条,结果确是意想不到的(是9条),我的SQL是这样的
select rownum,Page.* from(select id_item,itemname,id_itemclass,id_org from stm_list where id_item not in (select id_item from stm_exppsinfo where id_ptitem='P00002' and grpcode='200901' and IS_FENPEI='Y') and grpcode='200901' and id_ptitem='P00002' order by id_itemclass,id_org)Page where rownum<=66 MINUS select rownum,Page.* from(select id_item,itemname,id_itemclass,id_org from stm_list where id_item not in (select id_item from stm_exppsinfo where id_ptitem='P00002' and grpcode='200901' and IS_FENPEI='Y') and grpcode='200901' and id_ptitem='P00002' order by id_itemclass,id_org)Page where rownum<=60
查查了原因,原来是在使用order by的时候出问题了,本人的经验,在使用minus时同时又使用order by进行排序,这时候请加上第二个排序条件,而且这个排序的条件尽量不要重复,以免出现意想不到的结果,最好是主键。
总结:
1.oracle的minus是差集的意思
2.oracle的INTERSECT 是返回两个查询中都出现的记录
3.oracle的UNION 是返回两个查询的记录
分享到:
相关推荐
在使用集合操作符时,可以使用 ORDER BY 子句对结果集进行排序。例如: SELECT id, name FROM worker UNION ALL SELECT empno, ename FROM emp ORDER BY name; 在上面的例子中,ORDER BY 子句将对合并后的结果集...
总之,在Oracle数据库中处理"Top N"问题时,我们需要理解`ROWNUM`的工作机制,并灵活运用子查询、`MINUS`操作符或者新的`FETCH FIRST`语法。在实际应用中,应根据数据量、查询复杂度和数据库版本选择最合适的解决...
可以看到,Oracle的SELECT语句支持更多的子句,例如START WITH U CONNECT BY、INTERSECT和MINUS等。这些子句在SqlServer中不支持,但是可以使用其他方式实现相同的结果。 二、函数和过程 Oracle和SqlServer都支持...
SELECT *, ROW_NUMBER() OVER (ORDER BY MyKey) AS RN FROM TableA ) WHERE RN > 100 AND RN ; ``` 五、总结 在Oracle中,我们可以使用RowNum函数、Minus运算符、Subquery和Top-N查询来实现分页查询。这些方法...
ORDER BY order_expression ``` - **转换策略:** - 移除Oracle特有的基于成本的优化提示。 - 使用SQL Server的优化器。 - 使用递归CTEs替代`START WITH ... CONNECT BY` 子句。 - 使用`EXISTS` 或 `NOT ...
* 避免使用耗费资源的操作:带有 DISTINCT,UNION,MINUS,INTERSECT,ORDERBY 的 SQL 语句会启动 SQL 引擎,执行耗费资源的排序(SORT)功能 表设计和其他 * 建立数据库表时要尽量避免不必要的冗余项,但是为了提高...
LAG(attendance_date, 1) OVER (PARTITION BY employee_id ORDER BY attendance_date) AS prev_date, LEAD(attendance_date, 1) OVER (PARTITION BY employee_id ORDER BY attendance_date) AS next_date FROM ...
在编写SQL语句时,应避免使用复杂多表关联、游标操作,以及像UNION、MINUS、DISTINCT、ORDER BY、GROUP BY和HAVING等可能导致临时表创建的操作。可以尝试用更高效的替代方法,如将UNION替换为UNION ALL,将HAVING...
利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊结果输出 使用 ROWNUM,我们可以实现一些特殊方式的输出,如 Top N 结果...
- **ORDER BY语句的优化**:避免在`ORDER BY`子句中使用复杂的表达式或函数,因为这会降低查询性能。尽可能使用索引来排序数据。 - **HAVING语句的优化**:在可能的情况下,使用`WHERE`子句来代替`HAVING`语句。...
- 使用索引进行分组和排序,或者使用`MINUS`和`UNION ALL`替代`GROUP BY`。 - 利用`HAVING`子句替换嵌套的`WHERE`子句,避免对所有记录进行不必要的计算。 7. **游标和批量处理** - 游标常用于迭代处理,但过度...
2. Rownum在SQL中使用时有一些特殊的行为,特别是在带有子查询时。 3. Where rownum的执行过程与直接写5的执行过程不同。 4. Rownum=5的执行可能不会返回预期结果,需要特别注意。 十六、约束Constraint 1. 约束是...
如果需要对结果进行排序,可以使用`ORDER BY`子句: ```sql SELECT * FROM table_name ORDER BY column1 ASC/DESC; ``` 当你需要过滤数据时,可以使用`WHERE`子句: ```sql SELECT * FROM table_name WHERE ...
本文将深入探讨Oracle与通用SQL在实现分页查询时的不同方法,以及它们各自的优缺点。 ### Oracle的分页实现 在Oracle数据库中,分页查询主要依赖于ROWNUM伪列和MINUS操作符。ROWNUM用于返回行号,而MINUS则用于从...
`SELECT * FROM (SELECT * FROM 表 ORDER BY 列名 DESC) WHERE ROWNUM <= N MINUS SELECT * FROM (SELECT * FROM 表 ORDER BY 列名 DESC) WHERE ROWNUM ;` 这些问题涵盖了 Oracle 的基础知识、存储过程、索引、约束...
在Oracle数据库中,进行表内数据去重是一项常见的任务,特别是在处理大量数据时。面对一个包含一亿条记录,且每个记录只有一个字段`mobile`的`bao_mobile_temp`表,如何高效地去除重复数据,是本文要探讨的核心问题...
本篇文章将探讨如何在Oracle数据库中实现类似MySQL的`LIMIT`分页功能,以及如何模拟SQL Server的分页方式,并介绍`INTERSECT`和`MINUS`这两个SQL运算符。 首先,`INTERSECT`运算符用于找出两个或多个查询结果中的...