在我的數據庫中,我有相同的行。我只需要更新一行。Oracle更新多個相同行之一
我這樣做,但它不工作。
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)
在我的數據庫中,我有相同的行。我只需要更新一行。Oracle更新多個相同行之一
我這樣做,但它不工作。
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= ?)
這就是爲我工作。感謝大家,夥計。
2點要注意1.'這裏的rownum =如果使用where子句選擇''是不行的(選擇stat.stat_dial' * 2.無需要'爲了by'時,特別提到對'ronwnum = 1 ' – Pratik
添加要表的架構和所需的輸出。 – Pratik
我想你想用'rowid'(這是一個內部的「鑰匙」在一個表中的行),而不是'rownum'(這僅僅是一個序列號分配到每一行,因爲它是返回)看到@ vasja的答案看起來像它會工作 –