Announcement

Collapse
No announcement yet.

Zusammengesetzte Abfragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zusammengesetzte Abfragen

    Hallo!

    Bekomme die Fehlermeldung "Höchstens 1 Datensatz kann von dieser Unterabfrage zurückgegeben werden" unter Access 2000.

    Wenn kein Datensatz, oder nur 1 Datensatz zurückgeliefert wird von der Unterabfrage, dann kommt keine Fehlermeldung, alles läuft.

    Die Einzelabfragen für sich laufen wie gewünscht, nur nach dem zusammensetzen klappt es nicht mehr.

    <pre>
    SELECT R1.ID, R1.Name
    FROM Rezepturen AS R1
    WHERE R1.Version=

    (SELECT Max(R2.Version)
    FROM Rezepturen as R2
    WHERE (R1.PreID=R2.PreID) AND (R2.ID=

    (SELECT Rezepturen.ID
    FROM Rezepturen INNER JOIN (Layers INNER JOIN LayerItems ON Layers.LayerID = LayerItems.LayerID) ON Rezepturen.ID = Layers.RezeptID
    WHERE (LayerItems.RasinID=[@RasinID]) AND (Rezepturen.ProduktionOK=True))
    )
    );
    </pre>

    Habe den SQL mal etwas auseinandergezogen für Lesbarkeit. Probleme macht die letzte Unterabfrage, die allein für sich die richtigen Datensätze rauswirft.

    Mir raucht der Kopf, eigentlich sollte das doch klappen?!?

    Im Klartext sollen die RezeptIDs rausgegeben werden, die die höchste Versionsnummer einer GruppenID (PreID) besitzen und ein bestimmtes Teil (RasinID) innerhalb der (gejointen) Teileliste besitzen, sowie auch noch für die Produktion freigegeben.

    Was bedeutet die Fehlermeldung? Wieso kann der erste SQL-Teil nur einen DS verarbeiten? Kann irgendwer helfen?

    Gruss
    Nils

  • #2
    Hallo!

    Habs selber gelöst, allerding durch ausprobieren. Verstanden habe ich die Lösung nicht, wenn mir das jemand erklären könnte.

    Abfrage wurde wie folgt geändert, neu in fett:

    <pre>
    SELECT R1.ID, R1.Name
    FROM Rezepturen AS R1
    WHERE R1.Version=


    (SELECT Max(R2.Version)
    FROM Rezepturen as R2
    WHERE (R1.PreID=R2.PreID) AND (R2.ID=


    (SELECT Rezepturen.ID
    FROM Rezepturen INNER JOIN (Layers INNER JOIN LayerItems ON Layers.LayerID = LayerItems.LayerID) ON Rezepturen.ID = Layers.RezeptID
    WHERE (LayerItems.RasinID=[@RasinID]) AND (Rezepturen.ProduktionOK=True) <b>AND (Rezepturen.ID=R2.ID)</b> )
    )
    );
    </pre>

    Das ist dich doppelt gemoppelt, oder?!? Egal klappt aber, nach den ersten Tests.

    Gruss
    Nil

    Comment

    Working...
    X