现在有 一个表 id pid username data sessionid假设 id 为自增的。 pid 是存上一级的id username是某一个标示 data 是数据。 有这样两条数据
id pid username data sessionid 1 0 u1 111 空
2 1 u1 333 不是空
3 1 u1 444 不是空
如果 有一条记录 sessionid 不等于空 pid = 另一条记录的id , username 相等 并且另外一条记录的 sessionid 等于空,
那么把 这一条数据全部复制到另外一条记录上,并且把另外这一条数据的 sessionid 设置为空,然后把这一条记录删除。 如果同时存在几条这样的数据。 复制id最大的那个条记录
最后的结果为
id pid username data sessionid 1 0 u1 444 空不知道有没有描述清楚。 最好一条sql 语句搞定。 data 代表很多字段的。 一个一个写很麻烦, 实在不行 也没关系。
id pid username data sessionid 1 0 u1 111 空
2 1 u1 333 不是空
3 1 u1 444 不是空
如果 有一条记录 sessionid 不等于空 pid = 另一条记录的id , username 相等 并且另外一条记录的 sessionid 等于空,
那么把 这一条数据全部复制到另外一条记录上,并且把另外这一条数据的 sessionid 设置为空,然后把这一条记录删除。 如果同时存在几条这样的数据。 复制id最大的那个条记录
最后的结果为
id pid username data sessionid 1 0 u1 444 空不知道有没有描述清楚。 最好一条sql 语句搞定。 data 代表很多字段的。 一个一个写很麻烦, 实在不行 也没关系。
insert into tb select 1,0,'u1',111,'空'
insert into tb select 2,1,'u1',333,'不是空'
insert into tb select 3,1,'u1',444,'不是空'
select a.id,a.pid,a.username,b.data,a.sessionid from tb a inner join tb b on a.username=b.username
where b.sessionid<>'空' and a.id=b.pid and a.sessionid='空'
and b.id =(select max(id) from tb where pid=a.id)
go
drop table tb
--如果楼主所说的"空"是指NULL或空串的话,把相应位置上比较的值进行修改,如要比较NULL,则用 is null.
/*
id pid username data sessionid
----------- ----------- ---------- ----------- ----------
1 0 u1 444 空
*/