es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Unión MySQL pero convierte dos filas en la tabla unida en dos columnas.

Tengo una unión entre las dos tablas a continuación (info y files).
Lo que quiero es que la unión se vea como el diseño de la tercera tabla a continuación.

Para cada registro en la tabla info, sé que habrá dos filas con el mismo info_id en la tabla files.

No estoy seguro si necesito la versión de mysql de una tabla de pivote o algo más. Todavía estoy buscando cómo lograr esto, pero también estoy buscando ayuda. Cualquier asistencia que me oriente en la dirección correcta sería muy apreciada.

Tabla info
id nombre
1 Peter
2 Jane

Tabla files
id info_id nombre de archivo
1 1 peter_file_1
2 1 peter_file_2
3 2 jane_file_1
4 2 jane_file_2

lo que quiero es:

id nombre archivo1 archivo2
1 Peter peter_file_1 peter_file_2
2 Jane jane_file_1 jane_file_2

¡Gracias!
Peter T

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, puedes utilizar las cláusulas JOIN y GROUP BY de MySQL en combinación con la instrucción CASE para pivotear los datos. Aquí tienes un ejemplo de consulta que debería funcionar para tu escenario:

    SELECT i.id, i.nombre,
      MAX(CASE WHEN f.id = 1 THEN f.nombre_archivo END) AS archivo1,
      MAX(CASE WHEN f.id = 2 THEN f.nombre_archivo END) AS archivo2
    FROM informacion i
    JOIN archivos f ON i.id = f.info_id
    GROUP BY i.id, i.nombre;
    

    Explicación:

    • La JOIN entre las tablas info y archivos en el campo info_id asegura que solo se devuelvan los registros coincidentes.
    • La cláusula GROUP BY agrupa el conjunto de resultados por id de info y nombre, asegurando que cada registro se represente solo una vez.
    • La función MAX se utiliza dentro de la instrucción CASE para pivotear los dos archivos en columnas separadas. Como sabemos que siempre habrá dos filas en la tabla archivos para cada registro de info, podemos utilizar la función MAX para asegurar que los nombres de archivo se representen correctamente en el conjunto de resultados.

    Espero que esto te ayude. Avísame si tienes alguna pregunta adicional.

Comments are closed.