作者buganini (霸格尼尼)
看板Database
标题Re: [闲聊] 各家的SQL都有自己的脾气啊..
时间Sat Apr 7 00:08:58 2012
其实应该可以用
SELECT uid,max(login_time) FROM log GROUP BY uid ORDER BY log_time DESC
大概这样的写法
※ 引述《JYHuang (夏天到了,冷不起来了说)》之铭言:
: 最近工作上接触到的DBMS换成了informix.
: 原本从MySQL接触到MS SQL Server时,
: 以为SQL Server已经算是有个性了。
: 想不到这下informix的脾气也满大的(误
: 像是子查询里不能用order(好像是)
这样好像没什麽意义呀…
ORDER鹰该要在资料一切备妥才发生的不是吗@@a
不然子句的资料跟母句结合後不就又乱掉了
我想你在子句用ORDER的意义应该是在於汇总吧(底下有说)
除非说是用UNION结合的资料,这种在子句里用ORDER就比较有意义,
印象中MSSQL可以先UNION再ORDER也可以先ORDER在UNION
其他家我就没试过了…
: 想用这篇来稍微聊一下各家SQL一些常用上的语法差异
: 以ORDER By来说
: 以往在MySQL跟SQL Server上,Order By的条件跟SELECT是脱勾的
: 可以独立出来运作
: 不过informix却是要在SELECT column出现的才能Order的样子
: 举个例子,依最後登入时间来依序列出使用者
: MySQL跟SQL Server是这样的
: SELECT *
: FROM user U
: ORDER BY (SELECT max(login_time) FROM log L WHERE L.uid=U.uid)
这个写法其实有点奇怪,
order by吃得东西鹰该要是唯一值,当然用了max会是唯一的,
但是这样变成外面要检查子句select出来是不是唯一的,也有可能根本就没检查,
直接拿第一笔来用
: 而informix要这样
: SELECT *,(SELECT max(login_time) FROM log L WHERE L.uid=U.uid) as log_time
: FROM user U
: ORDER BY log_time DESC
: 还满奇特的..
: 不知道Oracle又是怎样~
跟上面差不多意思,如果子句不是唯一的话,是要怎样join呢?
或许有些parser会自动组合这些句子吧,不太清楚…
但GROUP BY才是比较严谨的写法吧,
之前用MSSQL的时候,不在GROUP BY fields里面的field,
都会要求要用汇总函数(sum/max/count之类的)来变成唯一值,
但我刚刚在MySQL试的时候好像没这种要求…
还是不知道MySQL到底是依据什麽原则在动就是了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.131.149.15
※ 编辑: buganini 来自: 140.131.149.15 (04/07 00:12)
※ 编辑: buganini 来自: 140.131.149.15 (04/07 00:15)