Mysql 查找两个表/记录集之间的差异

Mysql 查找两个表/记录集之间的差异,mysql,sql,database,Mysql,Sql,Database,我在MySQL数据库A和B中有两个表 两者的结构非常相似,因为表B中有记录,每次用户更改表A中的数据时,这些记录都会与所有数据一起插入,从而具有完整的更改历史。列Lastupdate为INT类型,以UNIX时间戳格式保存更新时间 假设表中有这样的记录: TableA Id User_id Name1 Name2 Lastname Lastupdate 1 12 John Alexander Smith 1405594757 2 27

我在MySQL数据库A和B中有两个表 两者的结构非常相似,因为表B中有记录,每次用户更改表A中的数据时,这些记录都会与所有数据一起插入,从而具有完整的更改历史。列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

但这似乎不是正确的方法,请告知

这应该表明哪些字段值发生了变化,以及它们是什么和它们变成了什么:

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)

@HamidAlaei谢谢,错过了日期子项的那部分,你们两个都有一个小小的调整-user_id作为关系,这正是我想要的