`
ypluck
  • 浏览: 77531 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用Oracle的minus时注意order by

阅读更多
昨天发现一个很奇怪的现象,我在分页时的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 是返回两个查询的记录
0
0
分享到:
评论

相关推荐

    Oracle集合操作函数union、intersect、minus.docx

    在使用集合操作符时,可以使用 ORDER BY 子句对结果集进行排序。例如: SELECT id, name FROM worker UNION ALL SELECT empno, ename FROM emp ORDER BY name; 在上面的例子中,ORDER BY 子句将对合并后的结果集...

    Oracle 的top问题

    总之,在Oracle数据库中处理"Top N"问题时,我们需要理解`ROWNUM`的工作机制,并灵活运用子查询、`MINUS`操作符或者新的`FETCH FIRST`语法。在实际应用中,应根据数据量、查询复杂度和数据库版本选择最合适的解决...

    Oracle和SqlServer语法区别

    可以看到,Oracle的SELECT语句支持更多的子句,例如START WITH U CONNECT BY、INTERSECT和MINUS等。这些子句在SqlServer中不支持,但是可以使用其他方式实现相同的结果。 二、函数和过程 Oracle和SqlServer都支持...

    java笔记\Oracle里sql不能用limit的处理

    SELECT *, ROW_NUMBER() OVER (ORDER BY MyKey) AS RN FROM TableA ) WHERE RN &gt; 100 AND RN ; ``` 五、总结 在Oracle中,我们可以使用RowNum函数、Minus运算符、Subquery和Top-N查询来实现分页查询。这些方法...

    ORACLE和SQL Server的语法区别

    ORDER BY order_expression ``` - **转换策略:** - 移除Oracle特有的基于成本的优化提示。 - 使用SQL Server的优化器。 - 使用递归CTEs替代`START WITH ... CONNECT BY` 子句。 - 使用`EXISTS` 或 `NOT ...

    Oracle性能问题总结

    * 避免使用耗费资源的操作:带有 DISTINCT,UNION,MINUS,INTERSECT,ORDERBY 的 SQL 语句会启动 SQL 引擎,执行耗费资源的排序(SORT)功能 表设计和其他 * 建立数据库表时要尽量避免不必要的冗余项,但是为了提高...

    Oracle计算连续天数,计算连续时间,Oracle连续天数统计

    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 ...

    Oracle存储过程编写及调优

    在编写SQL语句时,应避免使用复杂多表关联、游标操作,以及像UNION、MINUS、DISTINCT、ORDER BY、GROUP BY和HAVING等可能导致临时表创建的操作。可以尝试用更高效的替代方法,如将UNION替换为UNION ALL,将HAVING...

    ROWNUM的使用技巧

    利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊结果输出 使用 ROWNUM,我们可以实现一些特殊方式的输出,如 Top N 结果...

    oracle sql调优原则

    - **ORDER BY语句的优化**:避免在`ORDER BY`子句中使用复杂的表达式或函数,因为这会降低查询性能。尽可能使用索引来排序数据。 - **HAVING语句的优化**:在可能的情况下,使用`WHERE`子句来代替`HAVING`语句。...

    基于Oracle的SQL优化典型案例分

    - 使用索引进行分组和排序,或者使用`MINUS`和`UNION ALL`替代`GROUP BY`。 - 利用`HAVING`子句替换嵌套的`WHERE`子句,避免对所有记录进行不必要的计算。 7. **游标和批量处理** - 游标常用于迭代处理,但过度...

    oracle 学习笔记

    2. Rownum在SQL中使用时有一些特殊的行为,特别是在带有子查询时。 3. Where rownum的执行过程与直接写5的执行过程不同。 4. Rownum=5的执行可能不会返回预期结果,需要特别注意。 十六、约束Constraint 1. 约束是...

    oracle常用查询语句示例

    如果需要对结果进行排序,可以使用`ORDER BY`子句: ```sql SELECT * FROM table_name ORDER BY column1 ASC/DESC; ``` 当你需要过滤数据时,可以使用`WHERE`子句: ```sql SELECT * FROM table_name WHERE ...

    Oracle与SQL的分页实现

    本文将深入探讨Oracle与通用SQL在实现分页查询时的不同方法,以及它们各自的优缺点。 ### Oracle的分页实现 在Oracle数据库中,分页查询主要依赖于ROWNUM伪列和MINUS操作符。ROWNUM用于返回行号,而MINUS则用于从...

    oracle常见面试题及答案

    `SELECT * FROM (SELECT * FROM 表 ORDER BY 列名 DESC) WHERE ROWNUM &lt;= N MINUS SELECT * FROM (SELECT * FROM 表 ORDER BY 列名 DESC) WHERE ROWNUM ;` 这些问题涵盖了 Oracle 的基础知识、存储过程、索引、约束...

    oracle本表去重的语句优化

    在Oracle数据库中,进行表内数据去重是一项常见的任务,特别是在处理大量数据时。面对一个包含一亿条记录,且每个记录只有一个字段`mobile`的`bao_mobile_temp`表,如何高效地去除重复数据,是本文要探讨的核心问题...

    Oracle中实现MySql中limit+SqlServer分页+分页的存储过程

    本篇文章将探讨如何在Oracle数据库中实现类似MySQL的`LIMIT`分页功能,以及如何模拟SQL Server的分页方式,并介绍`INTERSECT`和`MINUS`这两个SQL运算符。 首先,`INTERSECT`运算符用于找出两个或多个查询结果中的...

Global site tag (gtag.js) - Google Analytics