SQL文:查找出两条记录不相同的字段项和内容(结构完全一致)

问题缘由:
希望在系统中添加详细的操作记录和操作审核的功能;操作被审核通过,则更新数据,不通过就不更新。

思路:
于是针对每个可能被修改的表添加一个相应的表(结构相同),用来存放操作更新后的数据,以待审核。审核操作表,目的是判断是否更新人员表。

问题:希望审核的时候可以看到哪些项目被修改,从“什么”修改为“什么”,并且只罗列那些被修改项目和具体内容。也就是说怎样读取两个结构完全相同表中两条记录的差异项目和具体内容。

形象点以下表说:

[人员表]:
id name gender birth
1 张三 男 1980-11-11

[操作表]:
id name gender birth
1 张三 女 1980-11-11

两表中可见性别被修改,怎样找出其他被修改的字段和具体内容;怎样写SQL可以读取两条记录不一致的项目和数据??

我主要是实现系统功能,如果可以给个好的思路也可以,还可以加分。
感谢 回答者:逐月追心:人员表有50个字段,这样写SQL不可取。如果换了其他表,例如 合同表就要重新写SQL。

感谢 回答者:独驾舟千里去:可以多次更改 待审核,审核通过的更改记录作为正式修改 去更新数据;不通过审核的 过期作废,数据不动。修改内容很多,应该须存储。 问题还是 怎样用简单的SQL语句将有过改动的数据显示给审核员看? 如果没有巧妙的方法,就只能根据字段来做循环了,这样也可以避免在程序里写字段名了。

第1个回答  2008-04-01
希望审核的时候可以看到哪些项目被修改,从“什么”修改为“什么”?如果仅仅给你男被改为女你知道谁的性别被改了?给你个思路你看看行不.把被修改过的行的两个表中的内容全部显示出来,可以这样实现(两个表中的ID应该是一致的吧):
SELECT *FROM 人员表 R
JOIN 操作表 C
ON R.ID=C.ID
WHERE R.NAME!=C.NAME
OR R.GENDER!=C.GENDER
OR R.BIRTH!=C.BIRTH
第2个回答  2008-04-01
这个需求最好不用数据库实现,用程序来实现比较好,因为同一笔数据可能被多次更改
建议你在数据表中增加一个原始ID和一个更改ID,原始ID在数据链中始终存在,发生一次更改就有一个递增的ID

那段程序可以写成是公共模块,字段名称并不用写死,从系统表中取出需要对比表的字段即可本回答被提问者采纳
第3个回答  2008-04-01
既然不是Access,为什么不使用触发器?

实现你描述这些功能本身就是触发器存在的基本目的。

请直接在触发器中访问Inserted和Deleted表,以返回你需要审核的信息。

当然,触发器无法满足你想延时审核的需求。
第4个回答  2008-04-01
select * from 表名1 inner join 表名1 on 表1.字段=表2.字段 where 条件
相似回答