一個很新鮮的問題, 請大家看看.有高分. (300分)

  • 主题发起人 主题发起人 uedit
  • 开始时间 开始时间
U

uedit

Unregistered / Unconfirmed
GUEST, unregistred user!
SELECT A, B, C
FROM DATA
WHERE IDXPARTNO = 753
AND IDXMACHINENO = 405
AND IDXPROCM = 981
AND ROWNUM <= 60
ORDER BY B DESC, C DESC

SELECT *
FROM (
SELECT A, B, C
FROM DATA
WHERE IDXPARTNO = 753
AND IDXMACHINENO = 405
AND IDXPROCM = 981
ORDER BY B DESC, C DESC
) A
WHERE ROWNUM <= 60

問題是這樣的, 上面有兩個語句, 是ORACLE的, 意思是要先排序再取前面60條記錄, 請大家比較一下兩個語句的差別,
我取到的結果是不一樣的, 請大家指教, 謝謝.
 
第一条是从原数据集中取出前60条记录再排序,
第二条是原数据集排序后再取出前60条。
 
今天我在用第二個語句時被人痛罵一通, 說我的語句效率太低, 要我找一個效率高的語句,
有沒有更簡單的方法可以實現第二個語句的功能.
 
抱歉,对ORACLE不熟
MS SQL中用TOP来实现这种效果

Select Top 60 * From ... Where ... Order ...

不知ORACLE中有没有Top关键字。
 
正因為如此, 所以今天才被罵了一通, MS SQL Server 的語句我也有, 因為我的程序要同時
支援ORACLE 和 MS SQL Server 兩個數據庫, 現在正在找更合適的 ORACLE 語句.
 
除非可以编写排序程序,用SQL语句只能用第二种!
 
用group by语句,ms,oracle都支持,且会排序。如果要倒序的话好像没有办法。
 
你根据索引查找排序撒;
如果要支持两个数据库的话,
你自己编写动态sql,根据数据库改变而改变。
 
能实现已经很不错了
SELECT *
FROM (
SELECT A, B, C
FROM DATA
WHERE IDXPARTNO = 753
AND IDXMACHINENO = 405
AND IDXPROCM = 981
ORDER BY B DESC, C DESC
) A
WHERE ROWNUM <= 60
 
我已问过两个专家了,没有好办法,只能根据实际数据做一些优化了
或使用视图
 
謝謝大家, 我已解決了該問題.
 
后退
顶部