View Erzeugen + Joins (MySQL)

DerNeuling

Benutzer
Beiträge
9
Hallo nochmals,

ich stehe mal wieder etwas auf dem Schlauch und würde mich freuen, wenn mir jemand helfen könnte.

Ich habe folgende 3 Tabellen:
upload_2021-7-14_18-11-40.png

Und möchte einen View erstellen, der wie folgt aussieht:
upload_2021-7-14_18-12-12.png

Den View mal außen vorgelassen - ich nehme einmal an, hier muss ich mit "JOIN" arbeiten, oder?
Nur bin ich gerade zu doof um herauszufinden was ich wie joinen muss. Könnte mir da jemand einen Tipp geben?
 

Anhänge

  • upload_2021-7-14_18-11-4.png
    upload_2021-7-14_18-11-4.png
    1,2 KB · Aufrufe: 1
Werbung:
Dein Wunsch-View ist unvollständig ;-)

Code:
edb=*# select * from teilnehmer;
 id |  name   
----+---------
  1 | meyer
  2 | mueller
  3 | schulze
  4 | fischer
  5 | schmidt
  6 | weber
(6 rows)

edb=*# select * from veranstaltung ;
 id | bez
----+-----
  1 | bwl
  2 | vwl
  3 | it
(3 rows)

edb=*# select * from teilnehmerliste ;
 v_id | t_id | l_id
------+------+------
    1 |    2 |    2
    1 |    3 |    2
    1 |    5 |    2
    2 |    4 |    4
    2 |    6 |    4
    3 |    1 |    1
    3 |    1 |    3
(7 rows)

edb=*# select tn.id, v.bez, tn.name from teilnehmerliste tl left join teilnehmer tn on tl.t_id=tn.id left join veranstaltung v on tl.v_id=v.id order by tn.id;
 id | bez |  name   
----+-----+---------
  1 | it  | meyer
  1 | it  | meyer
  2 | bwl | mueller
  3 | bwl | schulze
  4 | vwl | fischer
  5 | bwl | schmidt
  6 | vwl | weber
(7 rows)

edb=*#


Das scheint in Deinen Bespieldaten falsch zu sein, daß ein Fach von 2 Lehrern gemacht wird (zumindest nach Tabelle Teilnehmerliste). Was Du nicht bzw. ungenau abbildest:

  • ein Lehrer kann mehrere Fächer machen
  • ein Fach kann von mehreren Lehrern gegeben werden

Ach ja: aus dem Select ein CREATE VIEW zu erzeugen überlasse ich Dir zur Übung.
 
Danke für die Antwort! :)

Hmm. Habe eben nochmal drüber geschaut: Die Tabellen stehen aber genau so in der Aufgabe.
EDIT: Bzw. Ich habe einen Zusatz vergessen: Der View soll sich aus den Tabellen Veranstaltung, Teilnehmende und Teilnehmerliste zusammensetzen. Die ID sind jeweils PK und alle Spalten der Teilnehmerliste FK
 
Nochmal vielen Dank!

Nun geht's nur noch ans Verstehen... :D Funktionieren tuts aber auf alle Fälle schonmal:
Code:
DROP VIEW if exists [Uebersicht];
CREATE VIEW Uebersicht
AS
SELECT Teilnehmende.ID, Veranstaltung.Bezeichnung AS Veranstaltungsbezeichnung, Teilnehmende.Name AS Teilnehmende FROM Teilnehmerliste
LEFT JOIN Teilnehmende ON Teilnehmerliste.TeilnehmendenID = Teilnehmende.ID
LEFT JOIN Veranstaltung ON Teilnehmerliste.VeranstaltungsID = Veranstaltung.ID;

SELECT * FROM Uebersicht ORDER BY Uebersicht.ID;

upload_2021-7-14_19-37-36.png


Hast Du vllt. noch einen Tipp für mich, wie ich solche Aufgaben am besten angehe? Von der Übung soll ja möglichst viel bei mir hängen bleiben. ^^
 
Zuletzt bearbeitet:
Wobei so langsam fällt der Groschen glaube ich bei mir... In der nächsten Aufgabe sollte ich einen Temporären View erzeugen, der so aussieht:
upload_2021-7-14_20-35-9.png

Mit:
Code:
DROP VIEW if exists[Gesamtübersicht];
CREATE TEMPORARY VIEW Gesamtübersicht
AS
SELECT Lehrende.Name AS Lehrende, Veranstaltung.Bezeichnung AS Veranstaltung, Teilnehmende.Name AS Teilnehmende FROM Teilnehmerliste
LEFT JOIN Lehrende ON Teilnehmerliste.LehrendenID = Lehrende.ID
LEFT JOIN Veranstaltung ON Teilnehmerliste.VeranstaltungsID = Veranstaltung.ID
LEFT JOIN Teilnehmende ON Teilnehmerliste.TeilnehmendenID = Teilnehmende.ID;

SELECT * FROM Gesamtübersicht;

Erhalte ich schonmal die richten Werte:
upload_2021-7-14_20-36-30.png

Nur stimmt nun die "Sortierung" nicht... Bzw. meins ist schön sortiert, aber die Vorgabe solls offenbar nicht sein. :D

Könntest Du mir da vllt. noch mal einen Tipp geben?
 
Nur stimmt nun die "Sortierung" nicht...

Ohne ORDER BY bekommst Du die Ergebnisse unsortiert. Es kann sogar sein, daß bei wiederholtem Aufruf die Sortierung unterschiedlich ist (parallel sequential scan in PostgreSQL führt z.B. dazu). Auch ein UPDATE führt (meist) zu einer anderen physischen Reihenfolge der Rows.
 
Meine Lösung ist aber ohne ORDER BY und trotzdem sortiert?
Hatte natürlich schon versucht mit ORDER BY eine "Neue Ordnung" zu schaffen, aber habe da kein passendes "Sortiersystem" für erkennen können.
 
Werbung:
Zurück
Oben