如何使用MySQL或Oracle中的行号或列号更新表?

时间:2017-11-07 16:19:15

标签: mysql oracle

如何使用MySQL或Oracle中的行号或列号更新表?

作为“update test set name='Ranjan' where rownum=1;”,这适用于Oracle,但不适用于任何其他行。 这是表(名称=测试)供您参考:

   ID NAME
----- ----------
  101 prabhakar
  102 Dhiraj
  103 Pankaj

非常感谢任何帮助。提前谢谢!

3 个答案:

答案 0 :(得分:0)

您的查询只会更新一行,因为只有一行rownum = 1:

update test set name='Ranjan' where rownum=1;

查看oracle rownum documentation

答案 1 :(得分:0)

Oracle中的Rownum是返回集合中数据的rownum。如果在该查询中放置where条件,或者使用连接创建查询,则仍将具有rownum = 1,但它不一定是相同的返回行。 ROWID可能对更新更有用,这里有一个如何使用SQL随机更新行的描述。

Update n random rows in 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的含义。

returns

相关问题