此查询导致不支持" JOIN表达式"错误:
select * from (reclassdata r
left join
crsubstatus cs
on
r.namebillinglog=cs.recordedstatusperson)
left join
role_task rt
on
r.role=rt.role
and
cs.recordedstatus=rt.task
问题似乎是尝试将一个表role_task
连接到另外两个表reclassdata
和crsubstatus
,因为如果我将其重写为:
select * from (select * from reclassdata r
left join
crsubstatus cs
on
r.namebillinglog=cs.recordedstatusperson) x
left join
role_task rt
on
x.role=rt.role
and
x.recordedstatus=rt.task
但是后来我使用了额外的select *
,而我却没有达到这种性能。有没有办法解决不支持的" JOIN表达式"没有额外select
的错误?
答案 0 :(得分:0)
删除括号。
select *
from reclassdata r
left join crsubstatus cs on r.namebillinglog = cs.recordedstatusperson
left join role_task rt on r.role = rt.role and cs.recordedstatus=rt.task
答案 1 :(得分:0)
我认为子查询是唯一的出路。您发布的查询被认为是一个模糊的外部联接,因为Jet不知道哪个左连接首先进行评估:
select * from reclassdata r left join
(SELECT * from
crsubstatus cs left join
role_task rt on cs.recordedstatus=rt.task) t
on r.role=t.role and r.namebillinglog=t.recordedstatusperson
如果您担心性能损失,可以将子查询移动到单独的查询中。它可能有所帮助。如果性能仍然很差,您可能不得不求助于将子查询结果抛出到索引表中,然后在查询中链接回它。