LU09b: Üben – JOINs im Reiseblog

Ziel: JOINs selbst anwenden (INNER JOIN & WHERE-Variante). Arbeiten Sie direkt auf der DB aus LU08c.

Aufgabe 1 – Posts mit Autor:in

Geben Sie Post-ID, Titel, Autor aus – einmal mit INNER JOIN, einmal mit WHERE-Schreibweise. Nach Post-ID sortieren.

Erwartete Spalten: post_id, title, author

Aufgabe 2 – Posts pro Kategorie „Städtereise“

Listen Sie alle Posttitel auf, die zur Kategorie „Städtereise“ gehören (slug = 'staedtereise' ). Sortieren Sie nach Titel.

Aufgabe 3 – Posts mit Autor und Kategorien

Geben Sie Titel, Autor, Kategorie aus (eine Zeile pro Kategorie). Nach Titel, dann Kategorie sortieren.

Tipp: Sie brauchen drei Tabellen (posts, post_category, categories) – plus users, wenn der Autor gezeigt werden soll.

Aufgabe 4 – Suche nach Autorname

Zeigen Sie alle Titel der Posts, die von „Martin Merten“ geschrieben wurden.

Aufgabe 5 (optional) – Zählen ohne GROUP BY vermeiden

Finden Sie alle Kategorien, in denen Caro Steig mindestens einen Post hat. (Nur Kategorienamen ausgeben, ohne doppelte Zeilen.)

Tipp: SELECT DISTINCT c.name …

Lösungen (Beispielausschnitte)

A1 – Variante JOIN:

SELECT p.post_id, p.title, u.display_name AS author
FROM posts p
INNER JOIN users u ON p.author_id = u.user_id
ORDER BY p.post_id;

A2 – Kategorie „Städtereise“:

SELECT p.title
FROM posts p
INNER JOIN post_category pc ON p.post_id = pc.post_id
INNER JOIN categories c ON pc.category_id = c.category_id
WHERE c.slug = 'staedtereise'
ORDER BY p.title;

A3 – Titel, Autor, Kategorie:

SELECT p.title, u.display_name AS author, c.name AS category
FROM posts p
INNER JOIN users u ON p.author_id = u.user_id
INNER JOIN post_category pc ON p.post_id = pc.post_id
INNER JOIN categories c ON pc.category_id = c.category_id
ORDER BY p.title, c.name;

A4 – Posts von Martin:

SELECT p.title
FROM posts p
INNER JOIN users u ON p.author_id = u.user_id
WHERE u.display_name = 'Martin Merten'
ORDER BY p.title;

A5 (optional) – Kategorien von Caro (DISTINCT):

SELECT DISTINCT c.name
FROM categories c
INNER JOIN post_category pc ON c.category_id = pc.category_id
INNER JOIN posts p ON pc.post_id = p.post_id
INNER JOIN users u ON p.author_id = u.user_id
WHERE u.display_name = 'Caro Steig'
ORDER BY c.name;

Kurz-Referenz

INNER JOIN … ON – moderne, klare Schreibweise.

Mehrere Tabellen nach FROM + WHERE – ältere Variante, fachlich gleichwertig.

Join-Pfad denken: Von der Tabelle loslaufen, die Sie anzeigen möchten, dann Schritt für Schritt zu den benötigten Infos verbinden (z. B. posts → users oder posts → post_category → categories).

DISTINCT hilft gegen Dubletten bei N:M-Abfragen.

ORDER BY erst am Schluss – bestimmt die Ausgabe-Reihenfolge.