One more complex example: create table t10 (a int, b int); insert into t10 select seq, seq from seq_1_to_10; create table t20 (a int, b int); insert into t20 select seq, seq from seq_1_to_10; create table t21 (a int, b int); insert into t21 select seq, seq from seq_1_to_10; create table t30 (a int, b int); insert into t30 select seq, seq from seq_1_to_10; explain select * from t10 where t10.a < 3 or t10.b IN (select (t10.a+t20.a+t21.a) as HANDLE_ME from t20, t21 group by HANDLE_ME having 1 > (select max(t30.a) from t30 where HANDLE_ME < t30.b) ) Here "HANDLE_ME < t30.b" in subquery#3 is a reference to an item in subquery#2. However, HANDLE_ME in subquery #2 is defined as (t10.a+t20.a+t21.a) as HANDLE_ME and also has a reference out of subquery#2 to subquery #1.