Case When Statusabfrage

djadjabing

Grünschnabel
Hallo zusammen,
Ich habe Drei MySQL Tabellen und will diese Tabellen auf bestimmten Inhalt/Status prüfen

Tabelle 1: episoden
Spalten :
EpisodenID
EpisodenStaffel
EpisodenEpisode

Tabelle 2: lastadded
Spalten:
idShow
Staffel
Episode

Tabelle 3: episode_watched_neu
Spalten:
idShow
season
episode

EpisodenID & idShow (beide) beinhalten eine ID (keine fortlaufende Nummer ) auf diese Verknüpfe ich auch die Tabellen
Referenz ist die episoden Tabelle von der ist "alles abhängig"
Was will ich?
Ich will mir einen Status ausgeben lassen!
Wenn alle drei den Gleichen Inhalt haben soll bsp. Grün ausgegeben werden
Wenn nur episoden und lastadded eine übereinstimmung haben und episode_watched_neu null ist, dann Blau
und wenn nur episoden gefüllt ist Orange
gibt es keine Übereinstimmung Grey

ich hab auch schonmal angefangen und hab gerade voll den hänger
SQL:
Select case when e.EpisodenStaffel = l.Staffel = w.season then 'Grün' else 'Grau' end as palim,
e.EpisodenID, e.EpisodenStaffel, e.EpisodenEpisode, l.Staffel, l.Episode, w.season, w.episode
from WatchedList.episoden e
left join MyVideos99.lastadded l on e.EpisodenID = l.idShow and e.EpisodenStaffel = l.Staffel and e.EpisodenEpisode = l.Episode
left join WatchedList.episode_watched_neu w on e.EpisodenID = w.idShow and e.EpisodenStaffel = w.season and e.EpisodenEpisode = w.episode
    where e.EpisodenID = '' order by e.EpisodenEpisode asc;
e.EpisodenID kommt dann die entsprechende ID rein um die Tabellen zu laden

Wenn ich das ausführe bekomme ich da ein Grün zurück wo alles übereinstimmt (mach ich das mit den Episoden weil ja nicht nur die Staffel ausschlaggebend ist, bekomme ich Grau zurück)
Hat jemand eine Idee wie ich das umsetzten kann so wie ich das da oben beschrieben habe?

Wenn was unklar ist einfach fragen :)

Grüße & Danke
 
Zuletzt bearbeitet:
Was für eine DBMS ist das? Oracle? MS SQL? MySQL?
Was sind MyVideos99, WatchedList? Verschiedene Datenbankschemas?

Denk daran. Wenn du zu einer episode kein lastadded findest, dann ist l.Staffel NULL. Je nach DBMS solltest du das noch einbauen.
zB Oracle
SQL:
e.EpisodenStaffel = NVL(l.Staffel, 0)
 
Moin djadjabing,

wieso hast du die anderen Bedingungen denn nicht einfach weitergetippselt?
Das CASE-Kontrukt hatttest du doch schon...:)

SQL:
 SELECT
 ( CASE WHEN e.EpisodenStaffel = l.Staffel AND e.Episodestaffel =w.season THEN 'Grün'
      WHEN e.EpisodenStaffel = l.Staffel AND w.season is null           THEN 'Blau'
      WHEN l.staffel is null and w.season is NULL                       THEN 'Orange'
     ELSE 'Grey, aber welcher Fall soll das sein??'
     
 END) AS palim,
.....

Was in deiner Beschreibung der Unterschied zwischen Orange und Grau sein soll, das kann ich nicht nachvollziehen.

Die Klammer-Auf vor dem CASE und Klammer-Zu nach dem END müssen nicht sein.
Erleichtert manchmal die Lesbarkeit für Zweibeiner, dem Parser ist sowas egal.

Grüße
Biber
 
Zurück