Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

414
Vistas
SQL: cree una tabla y una clave externas a partir de una sola columna

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?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si está ejecutando mysql versión 8.0 o superior, puede hacerlo a continuación y usar la función de ventana ROW_NUMBER .

Fuente

 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;
over 4 years ago · Santiago Trujillo Denunciar

0

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.

  1. Agregue la nueva columna 'medium_old' y copie los valores existentes de medium
  2. Suelte la columna 'medio' con el tipo de carácter
  3. Agregue la columna 'medio' con el nuevo tipo int
  4. Actualice los nuevos valores 'medios' a la clave de la Tabla 2 en función de los valores en 'medio_antiguo'
  5. Agregue la restricción de clave externa a 'medio'
over 4 years ago · Santiago Trujillo Denunciar

0

Hay dos formas de hacerlo:

  1. Recrea la tabla 1 con los nuevos valores en la columna 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 ...
  2. Con la sintaxis de actualización de varias tablas, puede actualizar fácilmente un campo de una tabla en función de un campo de otra tabla. Usaría este enfoque si no necesita cambiar el tipo de datos de la columna medium . Consulte esta pregunta SO sobre cómo hacer esta actualización.
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda