Basta fare una concatenazione di gruppo insieme a un join tra le due tabelle:
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;
Nota che lo schema della tua tabella sembra non essere completamente normalizzato. In genere, il modo per gestire questo problema consiste nell'avere una singola tabella per le informazioni sugli studenti, una singola tabella per gli eventi e quindi un incrocio tabella che collega gli studenti agli eventi. I tuoi students
sembra che la tabella serva sia come tabella di giunzione che come tabella contenente informazioni univoche sugli studenti.
Quindi un modo migliore per procedere qui sarebbe il refactoring di students
per contenere questo:
(1, 'student1'),
(2, 'student2'),
(3, 'student3');
E crea una nuova tabella di giunzione student_event
per contenere il rapporto tra studenti ed eventi:
(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);