首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中重复记录的编号(2)

mysql中重复记录的编号(2)
EN

Stack Overflow用户
提问于 2013-09-04 08:48:13
回答 2查看 83关注 0票数 3

我有这张桌子,(sequence_No.)字段是null

代码语言:javascript
复制
ID        Name      age     sequence_No.
--        -----     ---     ------------
1         sara      20         
2         sara      20           
3         sara      20         
4         john      24         
5         john      24         
6         Hama      23         

我想将其更新为:

代码语言:javascript
复制
ID        Name      age     sequence_No.
--        -----     ---     ------------
1         sara      20         1
2         sara      20         2
3         sara      20         3
4         john      24         1
5         john      24         2
6         Hama      23         1

mysql中哪个查询可以做到这一点?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-04 08:53:18

您可以在mysql中使用关联子查询来模拟ROW_NUMBER()。带有序列号的结果表将与表本身连接,并使用生成的数字更新sequence_No的值。

代码语言:javascript
复制
UPDATE  tableName a
        INNER JOIN
        (
            SELECT  A.ID, 
                    (
                        SELECT  COUNT(*)
                        FROM    tableName c
                        WHERE   c.Name = a.Name AND
                                c.ID <= a.ID) AS sequence_No
            FROM    TableName a
        ) b ON a.ID = b.ID
SET     a.sequence_No = b.sequence_No
  • SQLFiddle演示
票数 4
EN

Stack Overflow用户

发布于 2013-09-04 09:02:41

代码语言:javascript
复制
SELECT  ID, Name, age, sequence_No
FROM
        (
            select  ID,
                    Name,
                    age,
                    @sum := if(@nme = Name AND @acct = age, @sum ,0) + 1 sequence_No,
                    @nme := Name,
                    @acct := age
            from    TableName,
                    (select @nme := '', @sum := 0, @acct := '') vars
            order   by  Name, age
        ) s
ORDER   BY ID

或者你可以用

代码语言:javascript
复制
SELECT 
ID,
Name,
age,
( 
CASE Name 
WHEN @curType 
THEN @curRow := @curRow + 1 
ELSE @curRow := 1 AND @curType := Name END
) + 1 AS sequence_No

FROM student, (SELECT @curRow := 0, @curType := '') r
ORDER BY  ID,NAME;

虽然我还没有进行测试,但是可以使用相同的方法来更新表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18609291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档