有人能确定为什么不接受这个多表联接吗?当我引入第三个表时,它就会失败,表别名无效。我看不出有什么问题:
这项工作(两张table):
select
a.ri as `R_ID`
,oc3.name as `RET`
,a.rch as `RC`
from dev.sl a join dev.codes oc3
on (a.pk_business = oc3.pk_business
and a.pk_data_source = oc3.pk_data_source
and a.pk_frequency = oc3.pk_frequency
and oc3.pk_data_state = '123'
and oc3.code = a.ri and oc3.codeset = 'xyz')
然后添加第三个表,结果失败:(三个表):
select
a.ri as `R_ID`
,oc3.name as `RET`
,a.rch as `RC`
from dev.sl a join dev.codes oc3
on (a.pk_business = oc3.pk_business
and a.pk_data_source = oc3.pk_data_source
and a.pk_frequency = oc3.pk_frequency
and oc3.pk_data_state = '123'
and oc3.code = a.ri and oc3.codeset = 'xyz') join dev.items b
on (b.pk_business = a.pk_business
and b.pk_data_source = a.pk_data_source
and b.pk_frequency = a.pk_frequency
and b.pk_data_state = '123'
and a.ii = b.item_id
and a.cc = b.country_code)
semanticexception[错误10009]:行1:2920无效的表别名“a”:
2条答案
按热度按时间qeeaahzv1#
再更新一次-可能不是由于事务表。通过额外的测试,我现在也看到非事务表也会发生这种情况。当我直接从服务器上的putty会话执行三表连接时,它似乎可以工作,但是当我使用sqldeveloper时,它会产生前面提到的错误。这似乎是sqldeveloper的一个问题,但原因仍不得而知。
9udxz4iz2#
我有一个更新-这似乎是由于有一个表被创建为可更新的表(tblproperty('transactional'='true')),还有一个没有,并且我的会话设置为:
这导致了问题。在另一个没有设置的会话上,并将其重新指向作为非acid类型表创建的相同表“a”,多表联接工作正常。我对配置单元的了解还不够,不知道为什么—我怀疑事务表和非事务表不能在同一个“transaction”(select语句)中联接。