如何解决"不支持JOIN表达"?

时间:2016-06-16 18:30:32

标签: sql ms-access ms-access-2010

此查询导致不支持" 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连接到另外两个表reclassdatacrsubstatus,因为如果我将其重写为:

,查询会成功运行
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的错误?

2 个答案:

答案 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

如果您担心性能损失,可以将子查询移动到单独的查询中。它可能有所帮助。如果性能仍然很差,您可能不得不求助于将子查询结果抛出到索引表中,然后在查询中链接回它。