我在查询中遇到一些语法问题(简体):
select *
from table1 t1
inner join table2 t2 using (pk1)
inner join table3 t3 using (pk2)
where not exists (select1 from table4 t4 where t4.pk1 = t1.pk1)
通过使用“ using”关键字,oracle不允许在表名之前的表标识符(例如:t1.pk1,只能使用pk1)
如果我写:
select *
from table1 t1
inner join table2 t2 using (pk1)
inner join table3 t3 using (pk2)
where not exists (select1 from table4 t4 where t4.pk1 = pk1)
该查询不会给出预期的结果。
但是,由于我使用的是“存在”子查询,因此如何加入该子查询?
当然,我想我可以用另一种方式编写此查询并避免该查询的存在,或者我不能使用“ using”。
但是是否可以在where子句中将“ join / using”与子查询结合使用?
编辑:使用Oracle 10gR2
最佳答案
有趣的问题!我仍然可以使用USING时可以管理的最好结果是:
select * from
( select *
from table1 t1
inner join table2 t2 using (pk1)
inner join table3 t3 using (pk2)
) v
where not exists (select1 from table4 t4 where t4.pk1 = v.pk1)