如何更新数据使计数连续
时间:2011-06-27
来源:互联网
SQL code
表结构如上,现在想通过一条SQl数据实现如下功能:
更新字段ordinal,使得每本书(book_id区分)的ordinal都是连续递增的,不同的书之间的ordinal计数互不干扰。
期望结果数据应该是:
SQL code
这个SQL该怎么写呢?赐教
CREATE TABLE IF NOT EXISTS kds( id int( 11 ) NOT NULL AUTO_INCREMENT , question varchar( 100 ) , book_id int( 11 ) NOT NULL default 0, ordinal int( 11 ) NOT NULL default 0, PRIMARY KEY ( id ) ) ENGINE = MYISAM default CHARSET = utf8; insert into kds (question,book_id,ordinal) values('text', 1, 0); insert into kds (question,book_id,ordinal) values('text', 1, 0); insert into kds (question,book_id,ordinal) values('text', 1, 0); insert into kds (question,book_id,ordinal) values('text', 2, 0); insert into kds (question,book_id,ordinal) values('text', 2, 0); insert into kds (question,book_id,ordinal) values('text', 3, 0); insert into kds (question,book_id,ordinal) values('text', 3, 0); insert into kds (question,book_id,ordinal) values('text', 1, 0); insert into kds (question,book_id,ordinal) values('text', 1, 0); insert into kds (question,book_id,ordinal) values('text', 2, 0); insert into kds (question,book_id,ordinal) values('text', 2, 0); insert into kds (question,book_id,ordinal) values('text', 4, 0); insert into kds (question,book_id,ordinal) values('text', 4, 0); insert into kds (question,book_id,ordinal) values('text', 3, 0); insert into kds (question,book_id,ordinal) values('text', 5, 0);
表结构如上,现在想通过一条SQl数据实现如下功能:
更新字段ordinal,使得每本书(book_id区分)的ordinal都是连续递增的,不同的书之间的ordinal计数互不干扰。
期望结果数据应该是:
SQL code
| id | question | book_id | ordinal | +----+----------+---------+---------+ | 1 | text | 1 | 1 | | 2 | text | 1 | 2 | | 3 | text | 1 | 3 | | 4 | text | 2 | 1 | | 5 | text | 2 | 2 | | 6 | text | 3 | 1 | | 7 | text | 3 | 2 | | 8 | text | 1 | 4 | | 9 | text | 1 | 5 | | 10 | text | 2 | 3 | | 11 | text | 2 | 4 | | 12 | text | 4 | 1 | | 13 | text | 4 | 2 | | 14 | text | 3 | 3 | | 15 | text | 5 | 1 | +----+----------+---------+---------+
这个SQL该怎么写呢?赐教
作者: canyingwushang 发布时间: 2011-06-27
SELECT A.ID,A.question,A.book_id,COUNT(B.ID) AS ordinal FROM kds A INNER JOIN KDS B ON A.BOOK_ID=B.BOOK_ID AND A.ID>=B.ID GROUP BY A.ID,A.question,A.book_id
OR
UPDATE KDS A1 INNER JOIN
(SELECT A.ID,A.question,A.book_id,COUNT(B.ID) AS ordinal FROM kds A INNER JOIN KDS B ON A.BOOK_ID=B.BOOK_ID AND A.ID>=B.ID GROUP BY A.ID,A.question,A.book_id
) B1
ON A1.book_id=B1.BOOK_ID
SET A1.ordinal=B1.ordinal
OR
UPDATE KDS A1 INNER JOIN
(SELECT A.ID,A.question,A.book_id,COUNT(B.ID) AS ordinal FROM kds A INNER JOIN KDS B ON A.BOOK_ID=B.BOOK_ID AND A.ID>=B.ID GROUP BY A.ID,A.question,A.book_id
) B1
ON A1.book_id=B1.BOOK_ID
SET A1.ordinal=B1.ordinal
作者: WWWWA 发布时间: 2011-06-27
引用 1 楼 wwwwa 的回复:
SELECT A.ID,A.question,A.book_id,COUNT(B.ID) AS ordinal FROM kds A INNER JOIN KDS B ON A.BOOK_ID=B.BOOK_ID AND A.ID>=B.ID GROUP BY A.ID,A.question,A.book_id
OR
UPDATE KDS A1 INNER JOIN
(SELECT……
SELECT A.ID,A.question,A.book_id,COUNT(B.ID) AS ordinal FROM kds A INNER JOIN KDS B ON A.BOOK_ID=B.BOOK_ID AND A.ID>=B.ID GROUP BY A.ID,A.question,A.book_id
OR
UPDATE KDS A1 INNER JOIN
(SELECT……
感谢!
您的SQL好像落下了一部分,我自己填上了
SQL code
UPDATE kds A1 INNER JOIN (SELECT A.id,A.question,A.book_id,COUNT(B.id) AS ordinal FROM kds A INNER JOIN kds B ON A.book_id=B.book_id AND A.id>=B.id GROUP BY A.id,A.question,A.book_id ) B1 ON A1.book_id=B1.book_id SET A1.ordinal=B1.ordinal where A1.id = B1.id
作者: canyingwushang 发布时间: 2011-06-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28