当前位置: 首页 > 知识库问答 >
问题:

SQL更新语句自连接

孙清野
2023-03-14
Gid Rid Cid PriorityId

1   7   11  NULL
1   7   12  NULL
1   8   13  NULL
1   9   25  NULL
1   13  18  NULL
1   13  19  NULL
1   14  23  NULL
1   14  24  NULL

我需要将priorityId设置为以下。有人能建议一个sql更新语句吗?我想我需要一个由Rid和Gid组成的组或自加入

Gid Rid Cid PriorityId

1   7   11  1
1   7   12  2
1   8   13  1
1   9   25  1
1   13  18  1
1   13  19  2
1   14  23  1
1   14  24  2

非常感谢。

共有2个答案

怀宇
2023-03-14

我会这样写更新:

with toupdate as (
    Select t.*
           Row_Number() Over (Partition By Gid, Rid Order By Gid, Rid, Cid) As new_PriorityId
    From Table t
   )
update toupdate
    set PriorityId = new_PriorityID;
岳永思
2023-03-14

对于SQL Server 2012,您可以使用以下语句,将Gid和Rid作为分区使用:

Update  T
Set     PriorityId = D.PriorityId
From    
(   
    Select  Gid, Rid, Cid,
            Row_Number() Over (Partition By Gid, Rid Order By Gid, Rid, Cid) As PriorityId
    From    Table
) D
Join    Table   T   On  T.Gid = D.Gid 
                    And T.Rid = D.Rid 
                    And T.Cid = D.Cid 

下面的内部语句应该在不更新表的情况下向您显示结果:

Select  Gid, Rid, Cid,
        Row_Number() Over (Partition By Gid, Rid Order By Gid, Rid, Cid) As PriorityId
From    Table
 类似资料:
  • 问题内容: 我有2个表格,Products和ShoppingCart,我想根据ShoppingCart中指定的产品名称和数量来更新和减少Products表中产品的“数量”。我怎样才能做到这一点? 表:产品字段:产品名称,产品数量 表:购物车字段:ProductName,ProductQty 访问数据库 问题答案: 您应该有一个产品ID。然而: 您还应该在字段和表名中删除空格。

  • 问题内容: 我需要使用REPLACE编写一条sql更新语句。字符串看起来像’SE * 88 * 000000001’。我需要替换两个星号“ *”之间的数字。除了要替换的数字始终在两个星号之间之外,这里没有其他模式。在这种情况下可以使用通配符吗? 感谢你的帮助。 谢谢! 问题答案: 或者,如果要替换的是一个特定的数字,那么它将更加简单:

  • 问题内容: 当我的SQL语句中只有一个内部联接时,它可以很好地工作。我尝试加入第二张表,现在出现一个错误,提示存在语法错误(缺少运算符)。这是怎么了 问题答案: 对于多表联接,您必须将多余的联接嵌套在方括号中: 基本上,对于除第一个表之外的所有其他表,都需要在原始“ FROM”表之前加上一个括号,并在匹配的JOIN“ on”子句上使用一个结束括号。

  • Mysql跨表、多表更新SQL语句总结 MySQL可以在一个SQL语句中更新多张表的记录,也可以通过多个表之间的关联关系更新某个表的数据。 假定目前有两张表goods和goods_price表,前者是保存商品的具体信息,后者是保存商品的价格,具体的表结构如下: create table goods ( `id` int unsigned primary key auto_increment, `g

  • 问题内容: 我有这两个SQL语句,我需要做的是将它们连接到一个语句中,但是当我这样做时,结果是不合适的。:/ 这就是我加入他们的方式: 这样,“ wynajecia”和“ wizyty”中的数字相同,这是错误的。:/ 编辑: 有了这段代码,我得到: 正确的输出应为: 我设法通过以下代码获得正确的答案: 但是我不是,这是解决问题的正确方法。 问题答案: 考虑以下场景: TableA记录的ID:{1、

  • 问题内容: 我不是SQL专家,但在iPhone应用程序中存在一个错误,其中UPDATE语句对数据库没有影响。我一直在为FireFox使用SQLlite管理器插件,通过反复修改和在db上运行UPDATE来尝试dbug。我还仔细运行了该语句,并使用SQL Validator进行了验证,该语句符合核心SQL标准。 您能发现以下给出的陈述有什么问题吗? 问题答案: SQLite以及Mozilla,Goog