1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Subquery - Liefert mehr als eine Zeile

Dieses Thema im Forum "Oracle" wurde erstellt von Webdesigner, 25 Dezember 2017.

  1. Webdesigner

    Webdesigner Benutzer

    Guten Tag,

    wenn ich das SQL-Statement
    Select * FROM (Select SUM((BIS_MINUTE/60+BIS_STUNDE)-(VON_MINUTE/60+VON_STUNDE)) as Std FROM Abhaltung p WHERE p.LVANR=320120 GROUP BY PERSNR) GROUP BY STD
    absetzte, erhalte ich maximal einen Eintrag. Wenn ich nun dieses Statement als Subquery verwende, erhalte ich die Fehlermeldung:
    ORA-01427: Unterabfrage für eine Zeile liefert mehr als eine Zeile
    Statement:
    Select (Select * FROM (Select SUM((BIS_MINUTE/60+BIS_STUNDE)-(VON_MINUTE/60+VON_STUNDE)) as Std FROM Abhaltung p WHERE p.LVANR=u.LVANR GROUP BY PERSNR) GROUP BY STD) FROM LVA u
    Es kann ja nicht sein, dass dieses Subquery mehr als einen Eintrag zurückgibt, da ich ja nach STD gruppiere. Dies ist auch die einzige Spalte. Kann mir jemand erklären, woran das liegt?

    [​IMG]
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Wenn Du dazu mal ein nachvollziehbares Beispiel lieferst (also CREATE TABLE, paar Testdaten, was rauskommen soll), wäre Hilfe deutlich einfacher. Dein GROUP BY PERSNR erscheint mir aber an dieser Stelle schon mal schlich unsinnig, weil Du da, so wie es scheint, nach einer nicht (im Result) vorhandenen Spalte gruppierst. Kann man machen, ist aber unsinnig.
     
  3. Webdesigner

    Webdesigner Benutzer

    Guten Tag,

    vielen Dank für die rasche Antwort.
    Wenn ich es mit meinen Testdaten ausprobiere, funktioniert es einwandfrei.
    Wenn ich jedoch mit realen Welt Daten teste, geht es nicht mehr.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Bitte.

    Dann stimmen die Testdaten nicht zu dem, was Du machst. Wenn Du testen willst, ob Dein Diesel-PKW auch mit Benzin fährt, macht es wenig Sinn, die 12Volt Eisenbahn mit 380KV Wechselstrom zu testen, die Ergebnisse des Tests lassen sich *wirklich* nicht entsprechend auswerten.

    Deine SQL's sind irgendwie unsinnig, Im innersten gruppierst nach einer Spalte, die im Resultat nicht da ist, dann kommt ein Select *, was ein GROUP BY auf eine Spalte hat, die es gar nicht gibt. Die Aufteilung von Zeiten in einzelne Spalten ist auch alles andere als eine Glanzleistung und hilft nicht, das Problem hier besser zu verstehen. Wie schon gesagt, es ist (für mich) jetzt nicht nachvollziehbar, was Du für eine Tabelle und für Daten hast und was bei raus kommen soll.
     
Die Seite wird geladen...

Diese Seite empfehlen