全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1390
推到 Plurk!
推到 Facebook!

Oracle query 的問題---有關Top的用法

尚未結案
tailen
中階會員


發表:82
回覆:109
積分:63
註冊:2002-04-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-08 16:55:46 IP:220.130.xxx.xxx 未訂閱
各位大大好: 今天我的工程師告訴我一個Oracle query的問題,讓我很訝異! 假設資料庫內容如下:table name = data1 Name score A 80 B 70 C 90 D 65 E 69 F 50 G 20 H 50 I 30 J 50 第一個問題: 下達:SELECT * FROM data1 結果:所有資料都出來,但是每次的結果排序不一定(不會按照A到J,且每次都不一定相同) 第二個問題: 要找出前三名: SQL: SELECT TOP 3 * FROM data1 WHERE score>60 Order by score 出來的結果不一定會是: C 90 A 80 B 70 而是有可能是 C 90 B 70 D 65 (他的說法是:因為oracle每次查詢的排序不一定,所以先做top時就有可能取得到還未排序的前三筆,之後再做order by score的動作) 是真的嗎?若是,是不是要設定primary key就可以了呢? 謝謝各位大大的指教!
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-08 22:11:55 IP:218.32.xxx.xxx 未訂閱
tailen 你好:    第一個問題: 沒有 Primary Key / Index , 也沒下 order by , 當然是...隨便排序囉.    第二個問題: SELECT TOP 3 * FROM data1 WHERE score>60 Order by score 我不知 Oracle 能用 "Top XX", 印象中...只有 MSSQL / ACCESS 才能這樣下. Oracle 若想達成類似的結果, 我都下: SELECT * FROM data1 WHERE score>60 and nownum<3 Order by score
tailen
中階會員


發表:82
回覆:109
積分:63
註冊:2002-04-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-09 08:48:48 IP:220.130.xxx.xxx 未訂閱
引言: SELECT TOP 3 * FROM data1 WHERE score>60 Order by score 我不知 Oracle 能用 "Top XX", 印象中...只有 MSSQL / ACCESS 才能這樣下. Oracle 若想達成類似的結果, 我都下: SELECT * FROM data1 WHERE score>60 and nownum<3 Order by score
Mickey大大您好: 謝謝您的回覆! 小弟再請教一下,nownum是Oracle的內定變數嗎?該變數是紀錄目前query幾筆了?小弟對Oracle較不熟悉,還請大大不吝指教!
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-09 11:06:20 IP:218.163.xxx.xxx 未訂閱
擷取一段 Oracle 的文件, 參考看看: A pseudocolumn behaves like a table column, but is not actually stored in the table. You can select from pseudocolumns, but you cannot insert, update, or delete their values. This section describes these pseudocolumns: CURRVAL and NEXTVAL LEVEL ROWID ROWNUM RowNum 像是.....'流水號'
Akqj1098
一般會員


發表:14
回覆:60
積分:14
註冊:2002-05-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-22 14:28:26 IP:220.130.xxx.xxx 未訂閱
引言: tailen 你好: 第一個問題: 沒有 Primary Key / Index , 也沒下 order by , 當然是...隨便排序囉. 第二個問題: SELECT TOP 3 * FROM data1 WHERE score>60 Order by score 我不知 Oracle 能用 "Top XX", 印象中...只有 MSSQL / ACCESS 才能這樣下. Oracle 若想達成類似的結果, 我都下: SELECT * FROM data1 WHERE score>60 and nownum<3 Order by score
Mickey 大大,您這邊好像手誤了 不是 nownum,應該是 Rownum 我記得曾經有個前輩告訴過我 Rownum,是Oracle 在每筆資料,自動會做一個記號(序號) 通常 Rownum 是一個隱藏的欄位 TOP 這個指令,好像不是 Oracle 的吧 應該是M$-SQL的指令吧 M$多了這個指令,我個人覺得滿不錯的喲
系統時間:2024-06-29 11:32:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!