Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Eine Abfrage mit fehlerhafter Unterauswahl sollte zu einem Fehler führen, gibt jedoch Zeilen zurück

Der Grund dafür ist, dass Oracle annimmt, dass Sie sich auf die Spalte aus der äußeren Abfrage beziehen, wenn eine Spalte ohne Alias ​​nicht in der Unterabfrage, aber in der äußeren Abfrage vorhanden ist.

Mit Aliasen würde die Abfrage, über die Sie verwirrt sind, wie folgt aussehen:

select *
from   test_values tv
where  tv.tst_id in (select tv.tst_id2
                     from   test_lookup tl
                     where  tl.tst_value = 'findMe');

Hoffentlich macht das die Sache klarer?

Das Problem, das Sie sehen, ist ein sehr gutes Beispiel dafür, warum Sie Ihre Spalten immer mit der Tabelle kennzeichnen sollten, aus der sie stammen - es macht es viel einfacher, die Abfrage für den Anfang zu verwalten!