AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken oracle sql anfrage, 2 bedingungen
Thema durchsuchen
Ansicht
Themen-Optionen

oracle sql anfrage, 2 bedingungen

Ein Thema von Jonas Shinaniganz · begonnen am 7. Jun 2015 · letzter Beitrag vom 16. Jun 2015
Antwort Antwort
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#1

oracle sql anfrage, 2 bedingungen

  Alt 7. Jun 2015, 10:20
Datenbank: oracle db • Version: 11+ • Zugriff über: oracle sql developer
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:
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 TheoryOR S.TITLE = 'Desperate Housewives';
Wenn es eine Lösung gibt, die mir 3 Spalten gibt:

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

Achso ja, das obligatorische "ich bin verzweifelt und komme echt nicht weiter" .. hier ist es
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: oracle sql anfrage, 2 bedingungen

  Alt 7. Jun 2015, 10:44
Nur eine Idee: beide Serien einzeln hinzujoinen.
SQL-Code:
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'
Ungetestet
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: oracle sql anfrage, 2 bedingungen

  Alt 7. Jun 2015, 10:48
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 7. Jun 2015 um 10:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: oracle sql anfrage, 2 bedingungen

  Alt 7. Jun 2015, 10:51
Er will doch die, die in beiden Serien mitgespielt haben, da wäre ein OUTER JOIN kontraproduktiv. Oder habe ich das falsch verstanden?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#5

AW: oracle sql anfrage, 2 bedingungen

  Alt 7. Jun 2015, 14:10
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.

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 LISTAGG verwendest.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: oracle sql anfrage, 2 bedingungen

  Alt 7. Jun 2015, 22:36
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: oracle sql anfrage, 2 bedingungen

  Alt 7. Jun 2015, 23:07
Ich denke der Ansatz von DeddyH ist richtig und gewünscht. Es werden alle Anforderungen erfüllt.
Dem ist nichts hinzu zu fügen!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#8

AW: oracle sql anfrage, 2 bedingungen

  Alt 16. Jun 2015, 11:18
Nur eine Idee: beide Serien einzeln hinzujoinen.
SQL-Code:
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'
Ungetestet
Ich konnte mich damit jetzt nochmal beschäftigen.

Zwischen EPISODE und PLAYS ist der Schlüssel PRODUCTION. Als mir das aufgefallen ist, hat es geklappt.

SQL-Code:
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'
Also hier der obligatorische Dank für die Hilfe.
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: oracle sql anfrage, 2 bedingungen

  Alt 16. Jun 2015, 11:36
Sry, Flüchtigkeitsfehler, aber schön, wenn es geklappt hat
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz