SQL trata en tablas. Por definición, una tabla tiene un montón de filas, cada una de las cuales tiene las mismas columnas que las demás. Su consulta generará un conjunto de resultados que duplica la información del cliente para cada curso que tomó.
Su capa de presentación va a formatear esa tabla, notando la primera fila de cada nuevo cliente y rompiendo el encabezado del cliente. Lo hará en php o Java o Crystal Reports o alguna tecnología de presentación similar.
Su consulta es algo como esto.
SELECT a.id, a.name, a.address, a.etc,
c.Name
FROM Clients a
JOIN CoursesForClients b USING(ClientID)
JOIN Courses c USING(CourseID)
ORDER BY a.id, c.CourseID
@Strawberry hace un buen comentario sobre la trampa de usar USING()
. Aquí está la misma consulta en ON
.
SELECT a.id, a.name, a.address, a.etc,
c.Name
FROM Clients a
JOIN CoursesForClients b ON a.ClientID = b.ClientID
JOIN Courses c ON b.CourseID = c.CourseID
ORDER BY a.id, c.CourseID