日期:2014-05-17  浏览次数:20758 次

求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);