Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pokaż wiele rekordów z rzędu

Po prostu wykonaj konkatenację grupową wraz z połączeniem między dwoma tabelami:

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

Zwróć uwagę, że schemat tabeli wydaje się nie być całkowicie znormalizowany. Zazwyczaj sposobem na rozwiązanie tego problemu jest posiadanie jednej tabeli na informacje o uczniach, jednej tabeli na wydarzenia, a następnie skrzyżowania tabela, która łączy uczniów z wydarzeniami. Twoi students Wydaje się, że tabela służy zarówno jako tabela połączeń, jak i tabela zawierająca unikalne informacje o uczniach.

Lepszym sposobem postępowania w tym miejscu jest refaktoryzacja students zawierać to:

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

I utwórz nową tabelę połączeń student_event zawierać relacje między uczniami a wydarzeniami:

(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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyzwalacze i blokada tabeli w MySQL

  2. Jak połączyć się z bazą danych MySQL za pomocą Oracle SQL Developer?

  3. Pobierz znak specyfikacji typu z pola MySQLi

  4. Pokaż rekordy od teraz() do następnych 7 dni w mysql

  5. Najlepszy sposób na zbudowanie wyszukiwarki SMART mySQL i PHP?