2011-07-17 9 views
2

は正しい文は応じtable_1Statusを更新することです私は二つのテーブルどのように私は、MySQLの列を更新します

のtable_1

ID Name Status 
1 John 
2 Peter 
3 Smith 

table_2

ID UID Status UpdateDate 
1 1  B  2010-05-05 
2 1  C  2011-03-02 
3 3  C  2011-03-02 
4 2  A  2011-03-02 

を考えてみましょう最後の日付に依存〜UpdateDatetable_2にあります。

結果は、この

のtable_1

ID Name Status 
1 John C 
2 Peter A 
3 Smith C 

おかげのようにする必要があります。

答えて

1
UPDATE table_1 SET Status = (
    SELECT Status FROM table_2 
    WHERE UID = table_1.ID 
    ORDER BY UpdateDate desc 
    LIMIT 1 
    ); 
+0

おかげカイル。アップデートは最新の 'UpdateDate'を使用することを知るには – hmmmm

+0

@hmmmm - 最新の日付を利用して' ORDER BY UpdateDate desc'を利用することで、謝罪します。 'TOP'の代わりに' LIMIT'を追加しました。 MySQLを使用します。 –

0

各UIDのステータスを取得するには:

SELECT UID, Status 
FROM (
    SELECT UID, MAX(UpdateDate) LastUpdateDate 
    FROM table_2 
    GROUP BY UID 
) l 
JOIN table_2 t ON t.UID = l.UID AND t.UpdateDate = l.LastUpdateDate 

更新するには:

UPDATE table_1 SET Status = l.Status 
FROM table_1 t 
JOIN (
    SELECT UID, Status 
    FROM (
    SELECT UID, MAX(UpdateDate) LastUpdateDate 
    FROM table_2 
    GROUP BY UID 
) l 
    JOIN table_2 t ON t.UID = l.UID AND t.UpdateDate = l.LastUpdateDate 
) l ON l.UID = t.ID