求SQL语句
有个头疼的事情
比如
A表中有 a,b,c.....N个字段
A.c的状态为(0,或1)
A.a=X(任意数值时)
A.b可以有很多不同数值 c是标志b是否有效
现在的问题是 当A.a一定时 相同的b 有效记录却有两条
请问如何把有效的两条中的一条c置为0(失效)
要批量处理整个表中的数据
谢谢
------解决方案--------------------max(rowid)
------解决方案--------------------update
(
select
a,b,c
from
A
where
c= 1
group by
a,b
having count(*) > 1
)
set
c=0
------解决方案--------------------update a
set c = 0
where rowid in
(
select max(rowid) from a
group by a.a,a.b
having count(*) > 1
)
------解决方案--------------------update a
set c = 0
where c=1 and rowid in
(
select max(rowid) from a where a.c=1
group by a.a,a.b
having count(*) > 1
)
------解决方案--------------------本人剛學Oracle
請問
tianyacao007(天涯草-请别在触碰我荒凉心中还在痛的角落) ( ) 信誉:100 Blog 2007-1-25 14:43:20 得分: 0
update
(
select
a,b,c
from
A
where
c= 1
group by
a,b
having count(*) > 1
)
set
c=0
的這種寫法是否能執行
------解决方案--------------------no!
------解决方案--------------------删除重复记录
最高效的删除重复记录方法 ( 因为使用了ROWID)
DELETE FROM a E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM a X
WHERE X.b = E.b);
------解决方案--------------------或者 更新记录
UPDATE a E SET c=0
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM a X
WHERE X.b = E.b);
------解决方案--------------------呵呵 何必搞得那么复杂,楼上的那个不错,我也写了个语句:
update
A A1
set
c=0
where
A1.rowid> (select min(A2.rowid) from A A2 where A1.a=A2.a and A1.b=A2.b);