SQL Tabelle Production/ Link

Hallo Leute,

ich musste gerade eine Anfrage in Oracle SQL machen, in der ich zwei geschachtelte Anfragen machen musste, die mir jeweils einen Wert liefern (mit Count) und diese dann miteinander verrechnen. Ich sollte einfach herausfinden, wie viele der Filme, die in diesem Jahr produziert wurden einen Vorgänger hatten. Ist ja auch egal. Die einzelnen Parts meiner Abfrage liefern das gewünschte Ergebnis, jedoch bekomme ich bei dem verrechnen immer eine Fehlermeldung ausgegeben. Es dürfte eigentlich ein ziemlich kleiner Fehler sein. Hier mein Code:

[SQL]
select succ.production / alle.production * 100 --eigentliche Rechnung

from

(Select count (p.production)

FROM Production p where year ='2013') alle,        --Alle Filme 2013

(SELECT count(p.production)

FROM Production p

where exists(

select * from (

	select L1.production1

	from LINK L1

	where exists (

		select * from (

		select L2.production1

		from LINK L2

	)L2

    WHERE L1.PRODUCTION2 = L2.PRODUCTION1

) AND lower(L1.LINK) = 'follows'

) L1

  WHERE p.PRODUCTION = L1.PRODUCTION1                                 --Nachfolger 2013

)AND lower(p.year) like '%2013%') succ

[/SQL]

Ich würde mich sehr freuen, wenn mir jemand helfen könnte :slight_smile:

Viele Grüße
NikeAir222

Und welchen Fehler?

“ORA-00904: “ALLE”.“LINK”: ungültiger Bezeichner”

Also ich gehe davon aus, dass ich mich in den Zeilen 8 und 40 bei den bezeichnungen vertan habe. Ich musste das ganze ja benennen um oben damit arbeiten zu können. Aber ich komme ums verrecken nicht drauf, was ich da machen kann, um das ganze noch zu richten -.-

Ein Schema wäre vllt. passend, dann kann man die Query evtl. etwas sinniger zusammenstellen

[ATTACH=CONFIG]1515[/ATTACH][ATTACH=CONFIG]1516[/ATTACH]

du postest deine Aufgabenstellung, durchaus hilfreich,
aber kommt dir nicht in Sinn, dass ca. 27fach wichtiger wäre zu wissen, welches Schema/ Tabellen du tatsächlich implementiert hast? :wink:

welche Tabellen mit welchen Attributen welcher Datentypen?

  • ‚Production‘ ist anscheinend eine Tabelle, gibt es darin ein Attribut LINK ja oder nein, wenn ja mit welchen Details usw.,
    die Fehlermeldung sagt nein und damit auch dass du das angeblich abfragst, aber ich sehe im Moment selber auch nicht, woher die Vermutung kommt (*)
  • mit LINK hast du noch eine zweite Tabelle from LINK L2?

mindestens dort dann auch ein Attribut LINK?..
das solltest du dir allgemein abgewöhnen, keine Attribute die wie Tabellen heißen,

production in der Tabelle Production genauso fragwürdig, was ist das dort eigentlich, welche Werte enthält das?
wieso kannst du das zählen zu welchem Zweck?
ob die Vorgabe ein solches Attribut erzwingt oder nicht kann ich nicht sicher interpretieren


(*) deine gepostete Query ist in jedem Fall unglücklich,
an erster Stelle schon reich technisch mit den Leerzeichen zwischen JEDER Zeile,

ich weiß nicht wie auch immer das bei manchen Usern kommt, du bist nicht alleine,
aber überlege, zumindest in Zukunft alles Denkbare zu versuchen, dies zu verhindern oder im Nachhinein zu korrigieren,
wenn du dir einmal bewußt bist, dass du in diese Kategorie Mensch/ technische Umgebung gefallen bist :wink:
das ist schlimm für alle Leser

ich habe versucht, die Query etwas aufzuräumen
[sql]select succ.production / alle.production * 100 --eigentliche Rechnung
from
(Select count(p.production) FROM Production p where year =‚2013‘) alle, --Alle Filme 2013
(SELECT count(p.production) FROM Production p
where exists(
select * from (
select L1.production1 from LINK L1
where exists (
select * from (
select L2.production1 from LINK L2 )L2
WHERE L1.PRODUCTION2 = L2.PRODUCTION1
) AND lower(L1.LINK) = ‚follows‘
) L1
WHERE p.PRODUCTION = L1.PRODUCTION1 --Nachfolger 2013
) AND lower(p.year) like ‚%2013%‘) succ
[/sql]
aber das scheint wohl hoffnungslos,

versuche in jedem Fall zunächst simple Queries, funktioniert
[sql]select * from Production
[/sql]
?
vielleicht dir schon bekannt, alles wichtige Informationen,
baue deine Queries Schritt für Schritt komplizierter, was geht alles noch, an welchem Punkt genau kommt der Fehler dazu?

wobei deine Query letztlich vielleicht vermeidbar ist,
denke für die Nachfolger-Subquery an normale Joins
[sql]select count(*) from p1, p2, link l where l.p1 = p1, l.p2 = p2 and p1 in 2013
[/sql]
oder so,
teste in jedem Fall derartige Subquery zunächst für sich, liefern sie genau die Zahl, die du auch erwartest?
danach dann die große Summe

wieso eigentlich an einer Stelle lower(p.year) like '%2013%', an einer anderen nur year ='2013'?
und ist Zahltyp hier verboten?