0

在我的数据库中,我有相同的行。我只需要更新一行。

我这样做,但它不工作。

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)
4

5 回答 5

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 )
于 2013-10-09T10:22:14.590 回答
4

每一行都应该有一个唯一的主键这是第一范式。

如果你没有,你有更大的问题。您应该尽快更改该数据库。

于 2013-10-09T10:05:42.750 回答
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。

于 2013-10-09T11:15:02.707 回答
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)
于 2013-10-09T12:59:41.533 回答
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= ? )

那对我有用。谢谢大家,伙计们。

于 2013-10-10T05:55:00.950 回答