在MySQL 5.5& 5.7,如果有一个包含4列的表,“a,b,c,d”
a,b,c,d
1,1,0,0
1,1,0,1
1,2,0,1
1,3,0,1
无论如何,我们可以根据a&列的每个独特组合添加另一个唯一的“ID”列(int或bigint)。 b在现有表格中?例如:
ID,a,b,c,d
1,1,1,0,0
1,1,1,0,1
2,1,2,0,1
3,1,3,0,1
另外,假设列b现在是一个字符串:
ID,a,b,c,d
1,1,Joe,0,0
1,1,Joe,0,1
2,1,Peter,0,1
3,1,Jan,0,1
我试过了AUTO_INCREMENT& UNIQUE,这似乎不适用于此,除非我错过了什么。任何古茹都可以开导吗?谢谢!
答案 0 :(得分:1)
编写一个查询,为a
和b
的每个组合分配一个递增的数字,然后将其与UPDATE
查询中的原始表一起加入。
UPDATE yourTable AS t1
JOIN (SELECT a, b, @counter := counter + 1 AS id
FROM (SELECT DISTINCT a, b FROM yourTable ORDER BY a, b) AS x
CROSS JOIN (SELECT @counter := 0) AS var) AS t2
ON t1.a = t2.a AND t1.b = t2.b
SET t1.id = t2.id
答案 1 :(得分:1)
Chubaka!
您可以使用CONCAT和LPAD函数组合a和b列。
LPAD对于避免冲突很重要,如:
CONCAT('1','10') = '110'
CONCAT('11','0' = '110'
SELECT CAST(CONCAT(a,LPAD(b,10,'0')) as UNSIGNED) id
, a
, b
, c
, d
FROM table_a;
或只是
UPDATE table_a SET id = CAST(CONCAT(a,LPAD(b,10,'0'));