Re: [閒聊] 各家的SQL都有自己的脾氣啊..

看板Database作者 (霸格尼尼)時間13年前 (2012/04/07 00:09), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
其實應該可以用 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)
文章代碼(AID): #1FVnKS8u (Database)
文章代碼(AID): #1FVnKS8u (Database)