Database 板


LINE

资料库名称: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; +------+------+------+ | b1 | b2 | b3 | +------+------+------+ | B | B4 | /14 | | F | B3 | /05 | | G | B5 | /10 | | A | B5 | /11 | +------+------+------+ b1栏位可以看到 B,F,G,A 是在新增资料进去时的原始排序 如果抓资料出来时对 b1 栏位做排序 select * from b order by b1 desc ; +------+------+------+ | b1 | b2 | b3 | +------+------+------+ | G | B5 | /10 | | F | B3 | /05 | | B | B4 | /14 | | A | B5 | /11 | +------+------+------+ b1栏位就变成由大到小的逆向排序 G,F,B,A 到此为止两边会是一样的 但是如果把这个抓出来的资料当成子表格 再度 select 一次 MariaDB 和 MySQL 就会产生不同的结果 select * from (select * from b order by b1 desc)tb1; +------+------+------+ +------+------+------+ | b1 | b2 | b3 | | b1 | b2 | b3 | +------+------+------+ +------+------+------+ | B | B4 | /14 | | G | B5 | /10 | | F | B3 | /05 | | F | B3 | /05 | | G | B5 | /10 | | B | B4 | /14 | | A | B5 | /11 | | A | B5 | /11 | +------+------+------+ +------+------+------+ 资料库的版本是 show variables like 'version'; +-----------------+ +--------------------------+ | Value | | Value | +-----------------+ +--------------------------+ | 10.1.13-MariaDB | | 5.0.51b-community-nt-log | +-----------------+ +--------------------------+ http://imgur.com/YfSymES http://imgur.com/HRdKxYx 没事当成子表格多 select 一次干什麽? 当然是有理由的 起因是因为 PTT 的一篇文章 看板 Database ┌─────────────────────────────────────┐ │ 文章代码(AID): #1O0O6zTK (Database) [ptt.cc] [SQL ] 两张同性质Table找出 │ │ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1476493757.A.754.html │ │ 这一篇文章值 132 Ptt币 │ └─────────────────────────────────────┘ 6675 10/15 s1237890210 □ [SQL ] 两张同性质Table找出相同资料较新的一笔 内文如下: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 内容/问题描述: Lot在不同厂区作业,希望能列出每一笔Lot的最新一笔停留站点, 不一定每笔Lot都会同时存在两张Table内, 目前的作法是先Union All後用时间排序,用回圈跑取不重复的资料出来, 应该要有办法直接Select出来,请赐教了<(_ _)> Table A Table B ------------------------------- ------------------------------ LotID LastStep LastStepTime LotID LastStep LastStepTime A Astep3 2016/10/15 B Bstep4 2016/10/14 B Astep3 2016/10/13 F Bstep3 2016/10/05 C Astep1 2016/10/14 G Bstep5 2016/10/10 D Astep2 2016/10/13 A Bstep5 2016/10/11 ------------------------------- ------------------------------ 希望得到的查询结果: LotID LastStep LastStepTime ------------------------------- A Astep3 2016/10/15 B Bstep4 2016/10/14 C Astep1 2016/10/14 D Astep2 2016/10/13 F Bstep3 2016/10/05 G Bstep5 2016/10/10 ------------------------------- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 内文结束 想说来试着解题看看 如果不要抓资料回去再用 php 或是 asp.net 或是 其他任何的主机端的语言来处理 要直接用一个 SQL 语法找出所需的资料的话 把抓到的资料当成子表格处理三次可以得到解 虽然不知道是不是个好方法,但是目前我想到可以这样做 但是实际在操作一次验证可不可行时 在我电脑上的 MariaDB 一直无法测试成功 无法取出最大值让我觉得很奇怪,却又抓不不出 Bug 後来换了别台电脑後就成功了 使用线上sql工具,选 MySQL 5.6 版本也是成功的 这个线上sql工具目前似乎是没有 MariaDB 可以选 所以就发现了 MariaDB 和 MySQL 两者处理方式的不同 「可能可以用」的解法 http://sqlfiddle.com/#!9/758ad/3 不清楚这是不是 MariaDB 在规格文件上有提到的变更? 又或者是? 其他的可能性? 总之先记下来提醒自己有这件事吧 - 这个结果是今天自己意外发现的 当然也有可能其实是我... 後知後觉?已知用火? 如果遇到这种结果不同的情形时,采用哪一种方式做可能会比较好? 1. 永远不要换资料库? 2. 不要用这种 sql 语法,避免以後升级资料库出问题? 3. 其他? -- ▁ ◢ ▄▄▄▄▄▄▄ . * ▁▁ 狼出没注意! . ˊ . ▅▂ ▂▅ ◢◤ ▄▄▄▄▄▄▄ . ▃▂▁ http://chippclass.99k.org/↙◆ ▇▇ telnet://bs2.to (P_chippclass)↙◆ ▆▅▂ ψchippclass ▅▂▁ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 182.235.174.82
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1476518496.A.8E8.html
1F:→ iFEELing: ORDER BY 不是应该要下在最外面那层吗? 10/15 17:24
是因为要解上一篇文章的题目才采用这种语法,所以 order by 没有在最外面一层 或是有什麽其他更好的语法可以让两种不同结果的资料库通吃? 我也很有兴趣
2F:→ iFEELing: 在子集合里排序然後两个子集合拼起来的时候还是会乱掉吧 10/15 17:29
我文章中只有使用到「先把两个子集合合并(union, not join) ,然後再排序」 你说的情形「子集合排序然後再合拼起来」并不在我的这篇文章中有出现过 所以我不清楚你在说哪一件事 ※ 编辑: chippclass (182.235.174.82), 10/15/2016 18:55:44 ※ 编辑: chippclass (182.235.174.82), 10/15/2016 18:58:31
3F:→ iFEELing: select * from (select * from b order by b1 desc)tb1; 10/15 19:11
4F:→ iFEELing: 不太晓得为什麽你会觉得在SUB QUERY里面排序之後 10/15 19:13
^^^^^^^^ 我会觉得? 很抱歉这不是我觉得,而是已经发生的事实 我文章内文有这麽一段: 资料库的版本是 show variables like 'version'; +-----------------+ +--------------------------+ | Value | | Value | +-----------------+ +--------------------------+ | 10.1.13-MariaDB | | 5.0.51b-community-nt-log | +-----------------+ +--------------------------+ http://imgur.com/YfSymES http://imgur.com/HRdKxYx 上面附了两张图,在原本的文章内容就有 现实摆在眼前 不是我觉得 而是某个版本的 MySQL (5.0.51b-community-nt-log) 他跑出来的结果就是:已经排序过的子集合,重新 select 後,排好的顺序不会变
5F:→ iFEELing: 再SELECT一次出来就一定是原本的顺序... 10/15 19:13
6F:→ iFEELing: 至少我自己的理解是要下ORDER BY的对象是最终的结果集.. 10/15 19:14
※ 编辑: chippclass (182.235.174.82), 10/15/2016 21:25:13
7F:→ iFEELing: 喔 所以你的问题是觉得Maria跟MySQL应该要100%一样? 10/15 21:27
8F:→ iFEELing: 某一个DBMS这样做不代表其他的DBMS也会这麽做吧 10/15 21:28
9F:→ iFEELing: 如果这不是标准规定的行为 甚至同DBMS不同版本也会不同 10/15 21:30
10F:→ iFEELing: 还是说你觉得号称相容就要连全部行为都100%一样? 10/15 21:32
11F:→ iFEELing: 我自己的理解是ORDER BY是对结果集排序 10/15 21:33
12F:→ iFEELing: 然後你最外层的SELECT是没有指定ORDERBY的 这样会怎麽 10/15 21:34
※ 编辑: chippclass (182.235.174.82), 10/15/2016 21:36:58
13F:→ iFEELing: 排就要看DBMS在处理中间资料集的时候实作的程序是怎样 10/15 21:34
14F:→ iFEELing: 比如处理的时候用HASH或平行 都有可能不是循序的 10/15 21:36
15F:→ iFEELing: 所以如果你要确定最後的结果是有排好的 应该在最外层排 10/15 21:36
16F:→ iFEELing: 不过既然你觉得这是BUG 那或许可以开问题给MARIA看看... 10/15 21:40
17F:→ duolala: 印象中,MSSQL也有此现象呀 10/30 23:04







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP