[SQL ] select排序過的子表格 結果不同?

作者: chippclass (善假狼賺錢中)   2016-10-15 16:01:32
資料庫名稱:MariaDB , MySQL
資料庫版本:10.1.13-MariaDB , 5.0.51b-community-nt-log
內容/問題描述:
雖然標題是:
[SQL ] select排序過的子表格 結果不同?
可是剩下的字數不夠我打出完整的意思,所以被簡化成那樣
完整的標題,我會想這樣打:
同樣的資料跟同樣的語法下
MariaDB 和 MySQL,去 select 一個已經排序過的子表格
產生出來的資料結果是不同的?
以下文章
是先打好在自己個人版上,然後再複製過來的
今天意外發現 MariaDB 跟以往我用的 MySQL 有不同的地方
來個文章記錄一下吧
MariaDB 和 MySQL,兩者之間的關聯性
把這兩個資料庫的名字丟去 Google 查
大概可以知道的就是創辦人是一樣的
然後 MySQL 被 Sun 買下來了,所以新推出 MariaDB
MariaDB 號稱可以完全相容於 MySQL
以上是我網路上查到的文章
在沒有得到反駁方的相關文章之前
就先以這些文章都是正確的前提下,來探討這兩個資料庫
而既然兩者是該完全相容的
所以如果出現相同的情況下卻有不同的處理方法
那我覺得是大事
因為這表示要是哪天要從 MySQL 換成 MariaDB
本來以為可以無痛升級
卻出現了沒想到的 Bug ?
首先來建立一個表格,然後放一些測試用的假資料進去
兩個資料庫都做這個動作
create table b (
`b1` char(1) ,
`b2` char(2) ,
`b3` char(3)
);
insert into b (b1,b2,b3) values
('B','B4','/14'),
('F','B3','/05'),
('G','B5','/10'),
('A','B5','/11');
有了這表格後,接著把資料用最基本的語法叫出來
select * from b;
+
作者: iFEELing (ing)   2016-10-15 17:24:00
ORDER BY 不是應該要下在最外面那層嗎?在子集合裡排序然後兩個子集合拼起來的時候還是會亂掉吧select * from (select * from b order by b1 desc)tb1;不太曉得為什麼你會覺得在SUB QUERY裡面排序之後再SELECT一次出來就一定是原本的順序...至少我自己的理解是要下ORDER BY的對象是最終的結果集..喔 所以你的問題是覺得Maria跟MySQL應該要100%一樣?某一個DBMS這樣做不代表其他的DBMS也會這麼做吧如果這不是標準規定的行為 甚至同DBMS不同版本也會不同還是說你覺得號稱相容就要連全部行為都100%一樣?我自己的理解是ORDER BY是對結果集排序然後你最外層的SELECT是沒有指定ORDERBY的 這樣會怎麼排就要看DBMS在處理中間資料集的時候實作的程序是怎樣比如處理的時候用HASH或平行 都有可能不是循序的所以如果你要確定最後的結果是有排好的 應該在最外層排不過既然你覺得這是BUG 那或許可以開問題給MARIA看看...
作者: duolala (哆啦啦)   2016-10-30 23:04:00
印象中,MSSQL也有此現象呀

Links booklink

Contact Us: admin [ a t ] ucptt.com