我对sql和数据库相对较新,并希望在以下主题中提供一些帮助。 我有下表:(初级男性 - > jm,初级女性 - > jf,成年男性 - > am,成年女性 - > af)
id code name
1 jm john
2 am patrick
3 af jane
4 jm peter
5 jm derrick
6 af mary
7 jf jessica
并希望在表格中创建一个字段作为参考,它以这种方式由代码和自动增量数字组成:
id code name reference
1 jm john jm001
2 am patrick am001
3 af jane af001
4 jm peter jm002
5 jm derrick jm003
6 af mary af002
7 jf jessica jf001
任何人都可以给我一些如何做到这一点的提示吗?谢谢
答案 0 :(得分:1)
首先,问问自己“为什么?”就像马丁的评论一样。如果你对这个问题有一个很好的答案,那么每种类型的序列可能都是你正在寻找的。例如在Oracle中:
CREATE SEQUENCE jm_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE;
CREATE SEQUENCE jf_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE;
CREATE SEQUENCE am_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE;
CREATE SEQUENCE af_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE;
然后,您可以在输入特定类型时使用这些。例如,要输入初级男性,您可以使用:
Insert into table_name
values (id_seq.nextVal, 'jm', 'Bart', 'jm' || jm_seq.nextVal);
此外,这不会像您的示例中那样为您提供前导零,因此如果需要,请考虑格式化您的号码。
答案 1 :(得分:0)
您可以在MySQL中使用自定义自动增量值,如PostgreSQL序列:
http://en.latindevelopers.com/ivancp/2012/custom-auto-increment-values/
我希望你发现它很有用。
答案 2 :(得分:0)
您可以按顺序使用以下代码来达到您想要的结果......干杯......
drop table if exists Custom_id_Dynamic;
create table Custom_id_Dynamic (id int primary key auto_increment , Code varchar(20),
Name varchar(20), Reference varchar(20));
drop procedure if exists Dynamic_id;
set @index:=0;
set @jm:=0;
set @unknown:=0;
set @am:=0;
set @af:=0;
set @jf:=0;
delimiter $$
create procedure Dynamic_id(
in code_new varchar(20), in name_new varchar(20)
)
begin
set code_new=lower(code_new);
if code_new='jm' then set @jm:=@jm+1, @index:=@jm;
elseif code_new='am' then set @am:=@am+1, @index:=@am;
elseif code_new='af' then set @af:=@af+1, @index:=@af;
elseif code_new='jf' then set @jf:=@jf+1, @index:=@jf;
else set @unknown:=@unknown+1, @index:=@unknown;
end if;
insert into Custom_id_Dynamic (Code, Name, Reference)
values (code_new, name_new, concat(code_new, lpad(@index,3,0)));
end;
call Dynamic_id('jm','john');
call Dynamic_id('am','patrick');
call Dynamic_id('af','jane');
call Dynamic_id('jm','peter');
call Dynamic_id('jm','derrick');
call Dynamic_id('af','mary');
call Dynamic_id('jf','jessica');
select * from Custom_id_Dynamic;