我正在尝试更新数据库的表 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
现在,我只想将所选列 amount 复制到 b_amount,将 date 复制到 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;