我有一個很奇怪的問題與sqlite3的 - 運行sqlite3的3.20.1版本的Windows。SQLite的力排序上選擇
在兩個不同的表同樣的SELECT查詢產生不同的結果。但是列數據類型和數據在兩者中都是相同的。這裏是CREATE和INSERT語句。
CREATE TABLE key(key INTEGER UNIQUE NOT NULL);
CREATE TABLE map(key INTEGER UNIQUE NOT NULL, char TEXT);
WITH RECURSIVE cnt(x) AS (SELECT 1 UNION ALL SELECT x+1 FROM cnt LIMIT 9999) INSERT INTO key(key) SELECT x FROM cnt WHERE x >=1000 ORDER BY random();
WITH RECURSIVE cnt(x) AS (SELECT 1 UNION ALL SELECT x+1 FROM cnt LIMIT 9999) INSERT INTO map(key) SELECT x FROM cnt WHERE x >=1000 ORDER BY random();
這應該插入隨機排序成兩列,從1000到9999的數字。但是,第二個表上的SELECT語句總是排序的。這是結果
sqlite> SELECT key FROM map LIMIT 10;
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
sqlite> SELECT key FROM key LIMIT 10;
6165
1856
2457
2343
9095
8005
4958
4781
8334
1863
我甚至嘗試了以下;
sqlite> DELETE FROM map;
sqlite> INSERT INTO map(key) SELECT key FROM key;
sqlite>
sqlite> SELECT key FROM map LIMIT 10;
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
它仍然排序!使用REPLACE也沒有幫助。 我試過甚至通過先添加id列來改變表格模式,但也沒有成功。
經過一番實驗後,我發現SELECT *
顯示它在正確的順序,但SELECT key
給出了有序的結果。
sqlite> SELECT * FROM map LIMIT 10;
8418|
5869|
9753|
2886|
8354|
8244|
4063|
6692|
5440|
3508|
你能解釋一下嗎?它是一個錯誤還是一個功能?我怎樣才能得到預期的輸出?
非常感謝。很有幫助! – Dawood
添加'ORDER BY ROWID'給出預期的結果。 – Dawood