sql >> Base de Datos >  >> RDS >> Mysql

Mostrar varios registros seguidos

Simplemente haga una concatenación de grupos junto con una unión entre las dos tablas:

SELECT
    s.student_name AS Students,
    GROUP_CONCAT(e.event_name) AS Events
FROM students s
LEFT JOIN events e
    ON s.event_id = e.event_id
GROUP BY
    s.student_name;

Demostración

Tenga en cuenta que el esquema de su tabla parece no estar completamente normalizado. Por lo general, la forma de manejar este problema es tener una sola tabla para la información del estudiante, una sola tabla para los eventos y luego un cruce tabla que conecta a los estudiantes con los eventos. Tus students La tabla parece estar sirviendo como una tabla de unión y como una tabla que contiene información única del estudiante.

Entonces, una mejor manera de proceder aquí sería refactorizar students para contener esto:

(1, 'student1'),
(2, 'student2'),
(3, 'student3');

Y cree una nueva tabla de unión student_event para contener la relación entre estudiantes y eventos:

(id, student_id, event_id)
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 1, 4),
(5, 2, 3),
(6, 3, 2),
(7, 3, 4);