兩個資料表用LEFT JOIN 同時選取另一個資料表最新資料??

edited 十月 2013 in 資料庫
A主資料表
A_id A_name
1  高高
2  阿皮

B相片資料表
B_id A_id B_file B_date
1  1  11.jpg 2009-03-01
2  1   22.jpg 2009-03-15
3  2   33.jpg 2009-03-03

我想要只列出A資料表的每個人,但又要B資料表屬於A的最新一筆
也就是像這樣
A_id A_name B_id B_file  B_date
1  高高   2  22.jpg 2009-03-15
2  阿皮   3  33.jpg 2009-03-03

我這樣寫
SELECT A.A_id,A.A_name, max( B.B_date ) AS NewUpdate, B.B_file, B.B_id
FROM A
LEFT B ON A.A_id = B.A_id
GROUP BY A.A_id
ORDER BY NewUpdate DESC

但是....發現錯了,因為只有B_date有最新但是B.B_file一樣會用舊的那一筆
也就是變成了
A_id A_name B_id B_file B_date
1   高高  1  11.jpg 2009-03-15

時間對了,但是B_id和B_file卻錯了 難道用max沒辦法把同一筆資料綁在一起選出來嗎?
請問該怎麼寫呢?

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=4008

評論

  • edited 三月 2009
    SELECT A.A_id, A.A_name, B.B_date, B.B_file, B.B_id
    FROM A
    LEFT JOIN B ON A.A_id = B.A_id
    GROUP BY A.A_id
    ORDER BY B.B_date DESC
    

    這樣子就好了?
  • edited 三月 2009
    大大~~不好意思,可能是我說明沒說清楚

    你最後用B_DATE排序,會一樣(沒辦法選到B的最新一筆)

    我是要A的每一筆出來不重複,

    但是在A的A_id 關聯 B的A_id時候
    如下
    B_id A_id B_file B_date
    1  1  11.jpg 2009-03-01
    2  1   22.jpg 2009-03-15
    3  2   33.jpg 2009-03-03

    假設B裡面的A_id=1時候有兩筆如下
    B_id A_id B_file B_date
    1  1  11.jpg 2009-03-01
    2  1   22.jpg 2009-03-15

    就只選出最新一筆
    應該要這一筆(而部是第一筆)
    2  1   22.jpg 2009-03-15


    也就是從A.A_id關連到B.A_id時
    B資料要先篩選屬於該筆A_id且是最新一筆這樣

    拜託了


  • edited 三月 2009
    沒有錯阿...
    GROUP BY本來就是用asc排序
    所以之後才去desc排序當然是針對asc後的結果去desc(暈了沒?)
    反正就是HAVING子句啦
    SELECT A.A_id, A.A_name, B.B_date, B.B_file, B.B_id
    FROM A
    LEFT JOIN B ON A.A_id = B.A_id
    GROUP BY A.A_id HAVING MAX(B.B_date)
    ORDER BY B.B_date DESC
    這樣就可以了嗎?
Sign In or Register to comment.