我正在寻找一个mysql update查询,它将两个字段连接在一起,然后在唯一值仍然存在的情况下,为每个值添加一个增量,并更新第三个字段。如果连接的值是唯一的,它仍然应该在连接的基础上加1。
示例
Field1 Field2 UniqueValue
====== ====== ===========
A B AB1
A A AA1
A A AA2
A A AA3
C D CD1发布于 2017-03-13 16:05:09
您可以使用用户变量为字段的每个唯一组合生成递增编号,然后将它们连接在一起。
select field1, field2, concat(field, rn) UniqueValue
from (
select
t.*,
@rn := if(@field = field, @rn + 1, if(@field := field, 1, 1)) rn
from
(select
field1, field2,
concat(field1, field2) as field
from your_table
order by field
) t, (select @rn := 0, @field := null) t2
) t;Demo
如果您想用生成的uniqueValue更新表-
如果您的表中有一个id列,您可以将您的表与上面关于该id的查询连接起来进行更新:
update your_table t1 join (
select id, concat(field, rn) UniqueValue
from (
select
t.id,
field,
@rn := if(@field = field, @rn + 1, if(@field := field, 1, 1)) rn
from
(select
id, field1, field2,
concat(field1, field2) as field
from your_table
order by field
) t, (select @rn := 0, @field := null) t2
) t
) t2 on t1.id = t2.id
set t1.uniqueValue = t2.UniqueValue;Demo
如果您没有id列,那么解决这个问题的一种方法是使用一个新表来加载新值,然后将其重命名为原始表:
drop table if exists your_table;
drop table if exists your_table_new;
drop table if exists your_table_old;
CREATE TABLE your_table(
Field1 VARCHAR(10) NOT NULL
,Field2 VARCHAR(10)
,UniqueValue Varchar(20)
);
INSERT INTO your_table(Field1,Field2) VALUES ('A','B');
INSERT INTO your_table(Field1,Field2) VALUES ('A','A');
INSERT INTO your_table(Field1,Field2) VALUES ('A','A');
INSERT INTO your_table(Field1,Field2) VALUES ('A','A');
INSERT INTO your_table(Field1,Field2) VALUES ('C','D');
create table your_table_new (field1 varchar(10), field2 varchar(10), uniquevalue varchar(20));
insert into your_table_new (field1, field2, uniqueValue)
select field1, field2, concat(field, rn) UniqueValue
from (
select
t.*,
@rn := if(@field = field, @rn + 1, if(@field := field, 1, 1)) rn
from
(select
field1, field2,
concat(field1, field2) as field
from your_table
order by field
) t, (select @rn := 0, @field := null) t2
) t;
rename table your_table to your_table_old, your_table_new to your_table;Demo
https://stackoverflow.com/questions/42758811
复制相似问题