Re: [SQL ] 相同資料不顯示

看板Database作者 (Daniel Guo)時間14年前 (2011/04/01 08:44), 編輯推噓0(004)
留言4則, 3人參與, 最新討論串2/2 (看更多)
你需要的是 row ranking, 但 MySQL 沒有原生支援, 可以用其他方法取得 但建議還是分開查詢比較好, 讓應用程式抓三次結果 (原因看下面就知道) 一個十分逆天的查詢的做法如下, 假設資料表為 income, pay, pay2 首先要取得一個日期有幾筆資料: http://codepad.org/4YGa69Hd 傳回結果: +------------+------+ | date | rank | +------------+------+ | 2011-01-01 | 1 | | 2011-01-01 | 2 | | 2011-01-01 | 3 | | 2011-01-01 | 4 | | 2011-01-02 | 1 | | 2011-01-02 | 2 | | 2011-01-03 | 1 | | 2011-01-04 | 1 | +------------+------+ 用此結果以 date, rank LEFT JOIN income, pay, pay2: http://codepad.org/18iPgXOK 傳回結果: +------------+--------+------+------+ | date | income | pay | pay2 | +------------+--------+------+------+ | 2011-01-01 | 100 | 50 | 50 | | 2011-01-01 | 150 | 50 | 50 | | 2011-01-01 | NULL | 50 | 10 | | 2011-01-01 | NULL | 10 | NULL | | 2011-01-02 | 100 | 30 | 30 | | 2011-01-02 | NULL | 10 | 10 | | 2011-01-03 | 50 | 50 | 50 | | 2011-01-04 | NULL | 50 | 50 | +------------+--------+------+------+ 註: 這邊SQL把每個 JOIN 都完整寫出來, 不用縮寫, 不過 MySQL 伺服器做的事情一樣 這邊用了一堆 JOIN, 用 EXPLAIN 出來有 17 個表, 資料一多效能一定很差 (UNION 2, UNION RESULT 1, PRIMARY 4, DERIVED 4, DEPENDENT SUBQUERY 6) 可以有更好的寫法, 如使用 view, temporary table 等等 不過我建議還是在應用程式排版較好, 對 MySQL 伺服器的負擔小太多了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 71.107.127.201 ※ 編輯: danielguo 來自: 71.107.127.201 (04/01 08:50)

04/01 09:34, , 1F
我比較好奇的是原po沒註明dbms,您如何確定原po是用mysql?
04/01 09:34, 1F

04/01 09:50, , 2F
因為會問這種笨問題的通常都不會使用太POWERFUL的DBMS
04/01 09:50, 2F

04/01 10:06, , 3F
XD, 倒是沒想到, 不過感覺像 MySQL
04/01 10:06, 3F

04/01 10:10, , 4F
不過不管是哪種 DBMS, 基本上知道不要這樣用這點就行了
04/01 10:10, 4F
文章代碼(AID): #1DbH_Wmj (Database)
文章代碼(AID): #1DbH_Wmj (Database)