Tengo una tabla con múltiples entradas duplicadas en una columna y quiero colocar estas entradas en una nueva tabla y conectar estas tablas con una clave externa en la tabla inicial.
Mesa antigua:
table 1 | id | name | medium | | 0 | xy | a | | 1 | xz | b | | 2 | yz | a |nueva tabla:
table 1 table2 | id | name | medium | | id | name | | 0 | xy | 0 | | 0 | a | | 1 | xz | 1 | | 1 | b | | 2 | yz | 0 |Con CREATE... SELECT tengo una buena herramienta para crear una nueva tabla a partir de los resultados de una consulta, pero no sé cómo cambiar las entradas de table1.medium a una clave externa según la comparación con table2.medium. ¿Hay alguna posibilidad de hacer eso?
Si está ejecutando mysql versión 8.0 o superior, puede hacerlo a continuación y usar la función de ventana ROW_NUMBER .
CREATE TABLE TABLE2 AS SELECT ID,NAME( SELECT ID, MEDIUM AS NAME,ROW_NUMBER()OVER(PARTITION BY MEDIUM ORDER BY ID) AS ROWW FROM TABLE1) WHERE ROWW=1; -- Adds a new column into your TABLE1 for MEDIUM's int values ALTER TABLE TABLE1 ADD COLUMN MEDIUMINT INT; -- Update MEDIUMINT according to your TABLE2 values. UPDATE TABLE1 S1 JOIN TABLE2 S2 ON TABLE1.MEDIUM=S2.NAME SET S1.MEDIUMINT=S2.ID; -- Drops MEDIUM column from TABLE1 ALTER TABLE TABLE1 DROP COLUMN MEDIUM; -- Rename MEDIUMINT column to MEDIUM ALTER TABLE TABLE1 RENAME COLUMN MEDIUMINT TO MEDIUM;Parece que puede crear Table2 pero tiene problemas para cambiar Table1, actualizar el tipo de columna de char a int y crear una clave externa.
Lo más fácil sería cambiar el nombre de Table1 a Table3, luego crear Table1 como desee, insertar los datos y luego soltar Table3.
Si necesita modificar la tabla existente, será un proceso de varios pasos.
Hay dos formas de hacerlo:
medium . Luego, suelta la tabla 1 anterior y cambia el nombre de la nueva tabla. Usaría este enfoque si la columna medium no solo necesita nuevos valores, sino que también debe convertirse a un nuevo tipo de datos; este parece ser el caso en la pregunta. Ya descubrió este enfoque con create table ... as ...medium . Consulte esta pregunta SO sobre cómo hacer esta actualización.