sql >> Databasteknik >  >> RDS >> Mysql

Visa flera poster i rad

Gör bara en gruppsammansättning tillsammans med en koppling mellan de två tabellerna:

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;

Demo

Observera att ditt tabellschema inte verkar vara helt normaliserat. Vanligtvis är sättet att hantera detta problem att ha en enda tabell för elevinformation, en enda tabell för händelser och sedan en korsning tabell som kopplar elever till evenemang. Dina students Tabellen verkar fungera både som en korsningstabell och som en tabell som innehåller unik elevinformation.

Så ett bättre sätt att gå vidare här skulle vara att refaktorera students att innehålla detta:

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

Och skapa en ny korsningstabell student_event att innehålla relationen mellan elever och evenemang:

(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);



  1. MySQL-fel #1071 - Angiven nyckel var för lång; max nyckellängd är 767 byte

  2. Hur man väljer en sträng mellan två strängar i en kolumn i SQL Server?

  3. Enkel Oracle-procedur misslyckas

  4. Entity Framework Core - Take(1), Single(), First()... Fungerar inte med Oracle Provider (ORA-00933:SQL-kommandot avslutades inte korrekt)