MySQL DB中有2个表(A和B) 两者都具有非常相似的结构,因为表B具有每次用户在表A中更改其数据时插入所有数据的记录,以具有完整的变化历史。 Column Lastupdate是INT类型,并以UNIX时间戳格式保留更新时间 所以我们假设表格中有这样的记录:
TableA Id User_id Name1 Name2 Lastname Lastupdate 1 12 John Alexander Smith 1405594757 2 27 Marry Ann Poppins 1405594877 3 51 Jean Claude VanFist 1405594677 Table B Id User_id Name1 Name2 Lastname Lastupdate 1 12 John Alexander Smit 1405594747 2 27 Marry Ann Poppins 1405594757 3 51 Jean Claude VanFist 1405594757 1 12 John 1405594727 1 12 John Alex 1405594737 3 51 Jean VanFist 1405594757
对于表A中的每条记录,我希望看到与表B的最新记录(基于Lastupdate)的比较以及哪些字段已更改
因此,对于user_id = 12,我会有类似
的内容Id User_id Name1 Name2 Lastname Lastupdate 1 12 John Changed name2:Alexander Changed lastname:Smith 1405594757
我正在尝试这样的事情
SELECT if(u1.name1 <> u2.name1, CONCAT("Changed: ",u1.name1), u1.name1)
FROM tableA u1,tableB u2
WHERE u1.user_id = 7433 AND u2.user_id = 7433
但似乎没有正确的方法请提供建议
答案 0 :(得分:0)
这应该表明哪些字段值发生了变化,以及它们是什么以及变成了什么:
select a.user_id,
case when a.name1 <> b.name1 then concat(b.name1,' changed to ',a.name1) else null end as name1_chg,
case when a.name2 <> b.name2 then concat(b.name2,' changed to ',a.name2) else null end as name2_chg,
case when a.lastname <> b.lastname then concat(b.lastname,' changed to ',a.lastname) else null end as lastname_chg
from tablea a
join tableb b
on a.user_id = b.user_id
where b.lastupdate = (select max(x.lastupdate)
from tableb x
where x.lastupdate < a.lastupdate and x.user_id = a.user_id)