有两个表: answer 和problem .两个表中的部分字段如下:
answer 表中的字段: id, problem(外键) askstate(回答状态)。 problem 表中的字段:id, asksate(根据answer的状态设置,如果它的回答有最佳答案,那么就设置为1,反之为0), answernum(回答条数) 其中asksate可以有三种值分别为0, 1(代表被采取为正确答案), -1(回答过期), 一个problem只能对应一个最佳答案,但是现在此表中的数据,一个problem的两个回答都会1,现在要设置其中的一个为1的等于0。 数据库中大概有将近2000条的数据,该怎么写sql语句。急用,请各位高手指点!谢谢
answer 表中的字段: id, problem(外键) askstate(回答状态)。 problem 表中的字段:id, asksate(根据answer的状态设置,如果它的回答有最佳答案,那么就设置为1,反之为0), answernum(回答条数) 其中asksate可以有三种值分别为0, 1(代表被采取为正确答案), -1(回答过期), 一个problem只能对应一个最佳答案,但是现在此表中的数据,一个problem的两个回答都会1,现在要设置其中的一个为1的等于0。 数据库中大概有将近2000条的数据,该怎么写sql语句。急用,请各位高手指点!谢谢
解决方案 »
- 请问两种备份表的区别?
- Oracle 如何优化
- oracle drop table 或者truncate table 问题
- 这样的sql如何写:要取出某月的所有天数
- oracle新建用户问题!
- oracle 建立表空间
- 请教:ORA-04098: 触发器 'JXKH.TR_JXKH' 无效且未通过重新确认!
- ***请教oracle9i以sys/change_on_install登陆遇到的问题***
- 怎样新增一个用户使它具有sysdba权限?
- 搞分寻找ASP+oracle高手!如何实现客户端的图片存到远程数据库oracle中的BLOB字段中?
- C++连接Oracle,提示找不到某个库
- 好烦!物化视图是不是不支持子查询啊,在线等
where not exists(
select * from (
select rowid,id,askstate,answernum,row_number() over(partition by askstate,题号) rn) b
where rn=1 and a.rowid=b.rowid;
update answer a set a.asksate=0 where a.problem=problem.id
然后在插入数据的时候,将最新插入的那条数据的“回答状态”设为1
where not exists(
select * from (
select rowid,id,askstate,answernum,row_number() over(partition by askstate,题号) rn) b
where rn=1 and a.rowid=b.rowid;
where not exists(
select * from (
select rowid,id,askstate,answernum,row_number() over(partition by askstate,题号) rn) b
where rn=1 and a.rowid=b.rowid;
借1楼的,改了改update answer a set asksate=0
where exists (
select 1 from (
select id,
count(1) over(partition by problemid) cnt,
row_num() over(partition by problemid order by id asc) row_no
from asksate
where askstate=1) b
where
a.id=b.id and b.cnt>1 and b.row_no=1)
没有测试,你自己试试。
where a.id in(select max(id) from problem where asksate=1 group by problem having(count(asksate)>1)
where a.id in(
select max(id) from problem where asksate=1 group by problem having(count(asksate)>1)
)
update answer a set asksate=0
where exists (
select 1 from (
select id,
count(1) over(partition by problemid) cnt,
row_num() over(partition by problemid…
[/Quote]
row_number()执行就可以了,谢谢你