[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