【问题标题】:how to convert select into update statement如何将选择转换为更新语句
【发布时间】:2013-09-29 09:53:33
【问题描述】:

我有一个 select 语句,我需要将它转换为 Update 语句。

SELECT GUID,seq original_seq_no, ROW_NUMBER()
OVER ( PARTITION BY GUID ORDER BY seq) AS new_seq_no
FROM CHK_SEQ;

上述查询的实际作用是,假设我有多个具有唯一 GUID 的记录,并且表 CHK_SEQ 中 SEQ 列的值是 6、9、10。然后运行上述查询将 SEQ 的值更改为 1,2,3,即 new_seq_no。

谁能帮帮我。

谢谢。

【问题讨论】:

  • 你用的是什么关系型数据库?
  • Oracle 和 SQL 服务器

标签: sql oracle11g


【解决方案1】:

试试这个(Sql-Server 2005 及更高版本):

With cte as (
  Select GUID,seq, row_number() over ( partition by GUID order by seq) AS new_seq_no
  From CHK_SEQ
)
Update c
Set c.seq = new_seq_no
From CHK_SEQ c 
     Join cte on c.Guid = cte.Guid and c.seq = cte.seq;

【讨论】:

  • 谢谢大家的回复,这个查询也会在Oracle中运行吗?
  • 我不确定 Oracle。尝试使用 Select 而不是 Update 并告诉我们...
  • 在尝试执行查询时出现此错误 SQL 错误:executeQuery 方法必须返回结果集。
【解决方案2】:

试试这个,

with cte 
AS
(
SELECT GUID,seq original_seq_no, ROW_NUMBER()
OVER ( PARTITION BY GUID ORDER BY seq) AS new_seq_no
FROM CHK_SEQ
)

update  CHK_SEQ
set     CHK_SEQ.seq = r.new_seq_no
from    cte r
where CHK_SEQ.seq = r.original_seq_no AND CHK_SEQ.GUID= r.GUID;

【讨论】:

  • 感谢您的回复。知道如何使它也可以在 Oracle 中工作。
  • 在尝试执行查询时出现此错误 SQL 错误:executeQuery 方法必须返回结果集
【解决方案3】:
merge into CHK_SEQ 
using
    SELECT rowid as rid, 
           ROW_NUMBER() OVER (PARTITION BY GUID ORDER BY seq) AS new_seq_no
    FROM CHK_SEQ
) t on (chk_seq.rowid = t.rid)
when matched then update
   set seq = new_seq_no;

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多