如何使用MySQL或Oracle中的行号或列号更新表?
作为“update test set name='Ranjan' where rownum=1;
”,这适用于Oracle,但不适用于任何其他行。
这是表(名称=测试)供您参考:
ID NAME
----- ----------
101 prabhakar
102 Dhiraj
103 Pankaj
非常感谢任何帮助。提前谢谢!
答案 0 :(得分:0)
您的查询只会更新一行,因为只有一行rownum = 1:
update test set name='Ranjan' where rownum=1;
答案 1 :(得分:0)
Oracle中的Rownum是返回集合中数据的rownum。如果在该查询中放置where条件,或者使用连接创建查询,则仍将具有rownum = 1,但它不一定是相同的返回行。 ROWID可能对更新更有用,这里有一个如何使用SQL随机更新行的描述。
确保这是你想要的......
答案 2 :(得分:0)
正如评论中已经提到的,更新第二行/第三行等对任何人都没有价值,因为我们无法控制显示顺序。我们不能完全依赖PSEUDOCOLUMNS
来选择特定的行。
使用ROWNUM
更新更高值的更新语句可能如下所示。
UPDATE table1
SET name = 'Ranjan'
WHERE id IN (SELECT id
FROM (SELECT ROWNUM rn,
t.*
FROM table1 t)
WHERE rn = 2);
请注意,这里我们必须依赖ID列来更新行,因为它就像一个固定到特定行的锚。这就是在我们的表的特定列上使用UNIQUE KEY
s / PRIMARY KEY
等的全部要点。您还可以注意到ROWNUM
在括号外被访问,因为ROWNUM
伪列返回一个数字,指示Oracle从表中选择行的顺序。因此,在内部引用ROWNUM = 2
是不明确的。因此,这update
毫无意义。但是,如果我在括号内加FROM table1 t ORDER BY name
,则表示我正在更新名称ID
的行,该行按字母顺序排在第二位。同样适用于按salary
,hire_date等顺序使用的其他列(如果适用)。
请阅读文档并清楚了解ROWNUM
的含义。