我正在尝试更新如下所示的数据库的表 B:
Table A:
id, amount, date, b_id
1,200,6/31/2012,1
2,300,6/31/2012,1
3,400,6/29/2012,2
4,200,6/31/2012,1
5,200,6/31/2012,2
6,200,6/31/2012,1
7,200,6/31/2012,2
8,200,6/31/2012,2
Table B:
id, b_amount, b_date
1,0,0
2,0,0
3,0,0
现在通过这个查询,我可以在一次选择中获得我需要的所有数据:
SELECT A.*,B.* FROM A LEFT JOIN B ON B.id=A.b_id WHERE A.b_id>0 GROUP BY B.id
id, amount, date, b_id, id, b_amount, b_date
1,200,6/31/2012,1,1,0,0
3,400,6/29/2012,1,1,0,0
现在,我只想将选定的列金额复制到 b_amount 并将日期复制到 b_date
b_amount=amount, b_date=date
导致
id, amount, date, b_id, id, b_amount, b_date
1,200,6/31/2012,1,1,200,6/31/2012
3,400,6/29/2012,1,1,400,6/29/2012
我试过 COALESCE() 没有成功。有经验的人对此有解决方案吗?
解决方案:
感谢下面的答案,我设法想出了这个。这可能不是最有效的方法,但对于一次性更新来说没问题。这将为您插入每个组的第一个相应条目。
REPLACE INTO A SELECT id, amount, date FROM
(SELECT A.id, A.amount, B.id as Bid FROM A INNER JOIN B ON (B.id=A.B_id)
ORDER BY A.id DESC)
GROUP BY Bid;