在我的数据库中,我有相同的行。我只需要更新一行。
我这样做,但它不工作。
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)
我目前无法验证这一点,但也许它会起作用:
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 )
每一行都应该有一个唯一的主键这是第一范式。
如果你没有,你有更大的问题。您应该尽快更改该数据库。
您可以更新具有满足您条件的最小 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。
您的查询是真的,只是其中的小问题,试试这个:
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)
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= ? )
那对我有用。谢谢大家,伙计们。