在我的数据库中,我有相同的行。我只需要更新一行。
我这样做,但它不起作用。
update stat.stat_dial
set
time = 200
where rownum = (select * from stat.stat_dial
where sesion= '0/1/0/3886.2241_D90EC01900C01899'
and rownum =1
order by time desc)
答案 0 :(得分:4)
每一行都应该有一个唯一的主键,这是第一个普通形式。
如果你没有,那你就有更大的问题。您应该尽快更改该数据库。
答案 1 :(得分:4)
我目前无法验证这一点,但可能会有效:
update stat.stat_dial
set time = 200
where rowid =
(select rowid from
(select rowid from stat.stat_dial
where sesion= '0/1/0/3886.2241_D90EC01900C01899'
order by time desc)
where rownum = 1 )
答案 2 :(得分:1)
您可以更新具有符合条件的最小rowid的行。
update stat.stat_dial
set time = 200
where rowid = (
select min(rowid)
from stat.stat_dial
where sesion= '0/1/0/3886.2241_D90EC01900C01899')
或
update stat.stat_dial
set time = 200
where rowid = (
select rowid
from stat.stat_dial
where sesion= '0/1/0/3886.2241_D90EC01900C01899' and
rownum = 1)
我认为我更喜欢后者的反射,因为前者总是在子查询中返回一行,即使条件不满足,但是结果为NULL。
答案 3 :(得分:0)
你的查询是真的只是一个小问题,试试这个:
update stat.stat_dial
set
time = 200
where rownum = (select rownum from stat.stat_dial
where sesion= '0/1/0/3886.2241_D90EC01900C01899'
and rownum =1
order by time desc)
答案 4 :(得分:0)
UPDATE stat.stat_dial
SET time=200
where sesion=? and login =?
and rowid = (SELECT min(rowid)
FROM stat.stat_dial sd1
where sd1.sesion = ?
or sd1.sesion= ? )
这对我有用。谢谢各位,伙计们。