在mysql数据库使用过程中,发现没有像db2那样方便能自动生成行号,于是通过网络查阅资料,现整理如下,方便以后自己查阅.
CREATE DATABASE -- 创建数据库
IF NOT EXISTS `sql_test` -- 如果不存在就创建,存在就不创建
DEFAULT CHARSET utf8 -- 设置默认字符集为utf-8
COLLATE utf8_general_ci; -- 设置数据库排序规则 utf8_general_ci
USE `sql_test`;
-- 创建测试表
CREATE TABLE s_t1(
tid VARCHAR(10) NOT NULL PRIMARY KEY,
root VARCHAR(10),
child VARCHAR(10)
);
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0110','A','a1');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0024','A','a2');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0027','A','a3');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0028','A','a4');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0021','B','b1');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0003','B','b2');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0006','B','b3');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0001','B','b4');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0013','B','b5');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0101','C','c1');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0007','C','c2');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0002','C','c3');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0033','D','d1');
insert into `s_t1` (`tid`, `root`, `child`) values('Sort_0035','D','d2');
SELECT
@r:=@r+1 AS rouNum,
a.*
FROM
s_t1 a,
(SELECT @r:=0) b
结果:
-- 方法1 先筛选数据,在编写序号
SELECT
@root_no:=CASE WHEN @root_val=a.`root` THEN @root_no+1 ELSE 1 END AS rootNo,
@root_val:=a.`root` AS rootVal,
a.`child`
FROM
(
SELECT * FROM s_t1 GROUP BY root,child
) a,(SELECT @root_no:=1,@root_val:='') b
-- 方法2 在删选数据的同事编写序号
SELECT
@group_row:=CASE WHEN @parent_code=a.root THEN @group_row+1 ELSE 1 END AS groupRow,
@parent_code:=a.`root` AS parent_code,
a.`child`
FROM s_t1 a ,( SELECT @group_row:=1, @parent_code:='') AS b
ORDER BY a.`root` , a.child
结果:
以上就是mysql中生成行号的方法,不知道还有没有更简单的