Oracle geschachtelte korrelierte Unterabfrage problem
Betrachten Tabelle1 und Tabelle2 mit einer eins-zu-viele-Beziehung ("Tabelle1" ist die master-Tabelle und Tabelle2 ist der detail-Tabelle). Ich möchte Datensätze aus Tabelle1, wo einige Wert ('XXX') ist der Wert des letzten Datensatzes in Tabelle2 der detail-Datensätze korrelierten auf table1. Was ich tun will, ist dies:
select t1.pk_id
from table1 t1
where 'XXX' = (select a_col
from ( select a_col
from table2 t2
where t2.fk_id = t1.pk_id
order by t2.date_col desc)
where rownum = 1)
Aber, da der Verweis auf Tabelle 1 (t1) in die korrelierte Unterabfrage ist zwei Ebenen tief, es öffnet sich mit einem Oracle-Fehler (ungültige id t1). Ich muss in der Lage sein, neu zu schreiben, aber die einzige Einschränkung ist, dass nur die where-Klausel geändert werden können (d.h. die anfängliche wählen Sie und aus muss unverändert bleiben). Kann es getan werden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein anderer analytischer Ansatz:
Und hier ist die gleiche Idee mit einer ranking-Funktion:
könnten Sie Analysen hier: join Tabelle1 in Tabelle2, die neuesten Tabelle2 Datensatz für jedes element in "Tabelle1", und stellen Sie sicher, dass diese jüngste element hat den Wert 'XXX':
Update: Ohne änderung an der top-level-WÄHLEN Sie, Sie schreiben, könnte eine Abfrage wie diese:
Grundsätzlich nur an (SEMI-JOIN) Zeilen aus Tabelle2, die die jüngsten für jede
fk_id
Versuchen Sie dies:
Nicht das tun, was du suchst?