sql >> Database teknologi >  >> RDS >> Mysql

Vis flere poster i træk

Bare lav en gruppesammenkædning sammen med en joinforbindelse mellem de to tabeller:

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

Bemærk, at dit tabelskema ikke ser ud til at være helt normaliseret. Typisk er måden at håndtere dette problem på at have en enkelt tabel til elevinformation, en enkelt tabel til begivenheder og derefter et kryds tabel, som forbinder eleverne til begivenheder. Dine students tabel ser ud til at fungere både som en samlingstabel og som en tabel, der indeholder unikke elevoplysninger.

Så en bedre måde at komme videre på her ville være at refaktorere students at indeholde dette:

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

Og opret en ny krydstabel student_event at indeholde forholdet mellem elever og arrangementer:

(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. Hvordan får man maksimum for et felt baseret på en dato og får også andre felter?

  2. Hvordan skal jeg redigere forespørgslen for at forbedre ydeevnen og samtidig bevare den eksisterende struktur?

  3. Sådan får du kalenderkvartal fra en dato i TSQL

  4. postgresql jsonb ufølsom forespørgsel