En MySQL 5.5 y 5.7, si hay una tabla con 4 columnas, "a, b, c, d"

a,b,c,d
1,1,0,0
1,1,0,1
1,2,0,1
1,3,0,1

¿Hay alguna forma de que podamos agregar otra columna "ID" única (int o bigint) en función de cada combinación única de columnas a & b en la tabla existente? Por ejemplo:

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

Además, asumiendo que la columna b ahora es una cadena:

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

Probé AUTO_INCREMENT & UNIQUE, que no parece funcionar aquí, a menos que me haya perdido algo. ¿Podría cualquier gurú iluminarse? ¡Gracias!

-1
Chubaka 16 dic. 2016 a las 00:28

2 respuestas

La mejor respuesta

Chubaka!

Puede combinar las columnas ayb usando las funciones CONCAT y LPAD.

LPAD es importante para evitar conflictos como:

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;

O simplemente

UPDATE table_a SET id = CAST(CONCAT(a,LPAD(b,10,'0'));
1
Pastor 15 dic. 2016 a las 21:50

Escriba una consulta que asigne un número creciente a cada combinación de a y b, luego únala con la tabla original en una consulta 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
Barmar 15 dic. 2016 a las 21:45