Problem mit Oracle-Select - Referenz in Sub-Select
Geizhals » Forum » Programmierung » Problem mit Oracle-Select - Referenz in Sub-Select (6 Beiträge, 324 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Problem mit Oracle-Select - Referenz in Sub-Select
05.04.2012, 16:09:53
Ich würde gerne ein Update folgender Struktur durchführen:

Update Table1
    set Feld1 =(select Wert1/Wert2           /*Select1*/
                  from (select sum(Werta) as Wert1,
                               count(*) as Wert2
                               Wert3
                           from Table2
                           where Table2.Wert4 = Table1.Wert4
                           group by Wert3)
               )

Leider bekomme ich die Fehlermeldung, Daß Table1.Wert ungültig ist. Anscheinend funktioniert die Referenz nach unten nichtin einer From-Clause.

An der Stelle Select1 wird noch einges mehr gemacht, habe ich hier aber weggelassen.

Natürlich könnte ich Wert4 ins Group by schreiben, und dann im Where überprüfen, aber ich wollte eigentlich verhindern, dass für jede Zeile in Table1 das Group by über die gesammte Table2 gemacht wird.
Gibt's d eine Lösung, oder muss ich eifach Wert4 in die Group by rein und beim Select1 abfragen?
emefge
Infosauger
_____________________________________________________________________________

Weil die Lichtgeschwindigkeit höher als die Schallgeschwindigkeit ist, hält man viele Leute für helle Köpfe bis man sie reden hört.

"Bekomme ich bei Ihnen so einen ganz kleinen Lötkolben zum CPU reparieren?"

Wieso Realität? Ich hab doch verdammt noch mal was Besseres zu tun!



Antworten PM Übersicht Chronologisch
 
Melden nicht möglich
.
Re: Problem mit Oracle-Select - Referenz in Sub-Select
07.04.2012, 17:00:18
Mit den bruchstückhaften Infos kann man nur raten (poste lieber den exakten Query).

Natürlich könnte ich Wert4 ins Group by schreiben, und dann im Where
überprüfen, aber ich wollte eigentlich verhindern, dass für jede Zeile in
Table1 das Group by über die gesammte Table2 gemacht wird.


Du musst ja so ohnehin für jede row in Table1 den subselect in der from-Klausel ausführen (er ändert sich ja auch mit jedem Table1.Wert4 [wenn er so funktionieren würde]).

Wenn das Subselect nicht von der aktuellen Table1-Row abhängt, kann das Ergebnis eh mehrfach verwendet werden. Also das was du als Lösung vorschlägst, sollte nicht so problematisch sein. Wenn dein UPDATE nur bestimmte rows betreffen soll (oben hast du dafür kein WHERE), dann ist es immerhin noch gut möglich, dass Oracle das so weit optimiert, dass der subselect die rows für andere Werte von Wert4 gleich wegwirft.

Mir fiele sonst nur ein, eine stored procedure zu schreiben, die das liefert, was bei dir nach "from" steht. Ich weiß nicht, ob das in Oracle so einfach/bequem geht wie in PostgresQL.





ACTA wird Menschen töten | wikileaks.geizhals.org


"Wenn Behörden solche Trojaner in Auftrag geben und sie benutzen, handelt es sich um eine neue Form der Staatskriminalität" (Heribert Prantl, sueddeutsche.de)

"Ermittlungen in großen Wirtschaftsstrafsachen unterliegen wegen der Berichtspflichten der Ermittler zum Innen- und Justizministerium vollends dem politischen Würgegriff" (N. Haslhofer, ehem. StA)
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung