![]() |
Datenbank: oracle db • Version: 11+ • Zugriff über: oracle sql developer
oracle sql anfrage, 2 bedingungen
Hallo, ich habe eine eigentlich recht einfache SQL-Anfrage.
Eine TV-Serie hat mehrere Episoden, in welchen je mehrere Schauspieler eine Rolle spielen. Ich möchte die Schauspieler herausfinden, welche in 2 verschiedenen TV-Serien eine Rolle hatten. Konkret die Schauspieler welche sowohl mal bei Big Bang und Desperate Housewives mitgespielt haben. Das Übungsblatt kommt von der Uni (ist nur eine von mehreren Aufgaben). Wortlaut: " Welche Personen haben in der Serie The Big Bang Theory und auch in der Serie Desperate Housewives mitgespielt. Geben Sie den Namen der Person und die jeweilige Rolle in den Serien aus. Keine Person soll mehrfach in der Ergebnisliste auftauchen. Verwenden Sie weder SQL-Mengenoperationen noch Unteranfragen." Mein Problem habe ich mal fett markiert. Ich bekomm es nicht zu Stande ohne meine geliebten SubSelects. Außerdem weiß ich nicht, ob Rollen-Namen verkettet (zb mit Komma) in einer Spalte hinter dem Namen der Person stehen sollen oder dann doch 2 Zeilen für jede Person okay sind. Im ersten Fall fände ich es ziemlich happig.. dann müsste ich ja String-Aggregate verwenden. Wäre nett wenn jemand das Statement schreiben könnte... // Relevanter Auszug aus dem Schema: SERIES (series, title, yearnull) EPISODE (production→PRODUCTION, series→SERIES, seasonnull, episodenull, air_datenull) PLAYS (person→PERSON, production→PRODUCTION, role) PERSON (person, Name) Und hier mein Ansatz, der mir schon mal alle Schauspieler mit der Rolle in der entsprechenden Serie liefert:
Delphi-Quellcode:
Wenn es eine Lösung gibt, die mir 3 Spalten gibt:
SELECT DISTINCT
per.NAME, p.role FROM SERIES S JOIN EPISODE E ON S.SERIES = E.SERIES JOIN PLAYS p ON p.PRODUCTION = E.PRODUCTION JOIN PERSON per ON per.PERSON = p.PERSON WHERE S.TITLE = 'The Big Bang Theory' OR S.TITLE = 'Desperate Housewives'; Name, "Rolle in DespHous", "Rolle in BigBang", ich wäre sehr dankbar und würde mir genau ansehen, wie die Anfrage strukturiert ist. VIELEN Dank :thumb: Achso ja, das obligatorische "ich bin verzweifelt und komme echt nicht weiter" .. hier ist es |
AW: oracle sql anfrage, 2 bedingungen
Nur eine Idee: beide Serien einzeln hinzujoinen.
SQL-Code:
Ungetestet
SELECT
PER.Name, P1.Role, P2.Role FROM PERSON PER JOIN PLAYS P1 ON P1.PERSON = PER.person JOIN PLAYS P2 ON P2.Person = PER.person JOIN EPISODE E1 ON E1.SERIES = P1.PRODUCTION JOIN EPISODE E2 ON E2.SERIES = P2.PRODUCTION JOIN SERIES S1 ON S1.SERIES = E1.SERIES JOIN SERIES S2 ON S2.SERIES = E2.SERIES WHERE S1.Title = 'The Big Bang Theory' AND S2.Title = 'Desperate Housewives' |
AW: oracle sql anfrage, 2 bedingungen
Im Notfall auch LELF JOIN, falls es nicht alles gibt.
z.B. jemand war nur in einer der Serien drin Und wenn es mehrere Datensätze in einer der JOINs gibt, dann gibt es so auch ein paar kleinere "Problemchen". z.B. jemand hat mehrere Rollen in der selben Serie gehabt. |
AW: oracle sql anfrage, 2 bedingungen
Er will doch die, die in beiden Serien mitgespielt haben, da wäre ein OUTER JOIN kontraproduktiv. Oder habe ich das falsch verstanden?
|
AW: oracle sql anfrage, 2 bedingungen
Zitat:
Ich gehe mal davon aus, dass der Fragesteller 2 getrennte Spalten für die Rolle(n) in der der jeweiligen Serie wollte (wie du weiter unten auch geschrieben hast). Über die Möglichkeit, dass jemand 2 unterschiedliche Rollen innerhalb der gleichen Serie spielt, hat der Fragesteller entweder nicht nachgedacht oder er wollte, dass du ![]() |
AW: oracle sql anfrage, 2 bedingungen
Ich denke der Ansatz von DeddyH ist richtig und gewünscht. Es werden alle Anforderungen erfüllt.
Listagg ist zwar nett, braucht aber für die Einschränkung der Serien auf genau 2 einen "aufwändigen" Unterbau ohne Union usw. und ist auch nicht Standard. Ausnahme wäre, Listagg wurde besprochen oder war sonstwie Teil des Stoffs. |
AW: oracle sql anfrage, 2 bedingungen
Zitat:
Gruß K-H |
AW: oracle sql anfrage, 2 bedingungen
Zitat:
Zwischen EPISODE und PLAYS ist der Schlüssel PRODUCTION. Als mir das aufgefallen ist, hat es geklappt.
SQL-Code:
Also hier der obligatorische Dank für die Hilfe. :thumb:
SELECT
PER.Name, P1.Role, P2.Role FROM PERSON PER JOIN PLAYS P1 ON P1.PERSON = PER.PERSON JOIN PLAYS P2 ON P2.Person = PER.PERSON JOIN EPISODE E1 ON E1.PRODUCTION= P1.PRODUCTION JOIN EPISODE E2 ON E2.PRODUCTION= P2.PRODUCTION JOIN SERIES S1 ON S1.SERIES = E1.SERIES JOIN SERIES S2 ON S2.SERIES = E2.SERIES WHERE S1.Title = 'The Big Bang Theory' AND S2.Title = 'Desperate Housewives' |
AW: oracle sql anfrage, 2 bedingungen
Sry, Flüchtigkeitsfehler, aber schön, wenn es geklappt hat :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz