読者です 読者をやめる 読者になる 読者になる

【MySQL】LEFT JOIN + UPDATE

LEFT JOIN + UPDATE

purchase_group_recordsテーブルに複数紐づくpurchase_recordsテーブルがあって、
purchase_recordsの最新issued_dateをpurchase_group_recordsのissued_dateにセットしたい。

purchase_record_groupsのidとpurchase_recordsの最新issued_dateは以下のSQLで取得できる。

SELECT 
	g.id as group_id, 
	r.issued_date 
FROM 
	purchase_record_groups AS g 
	LEFT JOIN 
	purchase_records AS r 
	ON 
		g.id = r.purchase_record_group_id 
		AND 
		r.created_date = (SELECT MAX(r2.created_date) FROM purchase_records AS r2 WHERE g.id = r2.purchase_record_group_id)


ここで取得した g.id を元に r.issued_date を purchase_group_records の issued_date にセットしたい。
そんなときは以下のようにテーブル名を上記のクエリで置き換える。

UPDATE 
	purchase_record_groups AS g 
	LEFT JOIN 
	purchase_records AS r 
	ON 
		g.id = r.purchase_record_group_id 
		AND 
		r.created_date = (SELECT MAX(r2.created_date) FROM purchase_records AS r2 WHERE g.id = r2.purchase_record_group_id)
SET g.issued_date = r.issued_date;

これは便利だ。