Oracle
 sql >> Database >  >> RDS >> Oracle

La query con una selezione secondaria interrotta dovrebbe generare un errore ma restituisce righe

Il motivo è perché quando una colonna senza alias non esiste nella sottoquery ma esiste nella query esterna, Oracle presume che ti riferisci alla colonna della query esterna.

Con gli alias, la query su cui sei confuso sarebbe simile a:

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

Si spera che questo renda le cose più chiare?

Il problema che stai riscontrando è un ottimo esempio del motivo per cui dovresti sempre etichettare le colonne con la tabella da cui provengono:per cominciare, è molto più semplice mantenere la query!