2010-04-30 58 views
2

我尝试在Access中执行3表连接,它不起作用。可能吗?是否可以在MS-Access中执行3表连接?

+1

你试过什么SQL没有用? – 2010-05-02 21:35:32

+0

参考此https://stackoverflow.com/questions/19367565/access-sql-inner-join-with-multiple-tables – 2017-10-14 00:10:33

回答

1

是的,这是可能的:

Select * 
From A, B, C 
Where A.a = B.b 
And A.c = C.c 

Select * 
From A, B, C 
Where A.a = B.b 
And B.c = C.c 
+1

如何/为什么这是'非常非常糟糕'?我一直以这种方式构建查询长达20年,从来没有遇到任何问题 - 也许你可以充分详细地解释你的批评,以便我们理解你的观点,从而做出我们自己明智的决定......? – 2010-04-30 14:28:47

+0

Jet/ACE将隐式联接优化为与等效显式联接完全相同,因此通常不会因使用隐式联接而受到任何惩罚。注意我常说“我经常” - 我认为在可能的情况下显式连接是可取的,因此只有在需要时才使用隐式连接(或者不太复杂)。 – 2010-04-30 21:23:19

+0

我还是好奇。除了语法偏好外(为了清楚起见,我可以看到支持显式连接语法的论据),根据我的经验,这是个人喜好问题,是否有任何RDBMS引擎比隐式连接更成功地优化显式连接,或者提供了一些他们使用其他优势?我不是'反对'明确的连接,我只想知道为什么我是一个非常非常不好的人使用隐式连接发布示例。如果我一直在做错了二十年,为了Xods的缘故,有人告诉我和我们所有人为什么! – 2010-05-01 09:22:10

5

我曾经有一个问题,当我试图

select 
    x, 
    y 
from 
    A  inner join 
    B on k=l inner join 
    C on f=g 

这没有奏效。但它与括号:

select 
    x, 
    y 
from ( 
    A   inner join 
    B on k=l) inner join 
    C on f=g 
+2

Jet/ACE SQL的JOIN语法总是需要括号来连接两个以上的表。如果您在Access QBE中执行连接,您将始终得到正确的结果。 – 2010-05-02 21:35:00

8

所有不同类型的多表连接是在SQL的其他味道可被允许在MS-访问/喷气机。例如,这里有一个连续三个表层次的例子(多一点现实世界比其他的答案在这里):

SELECT 
    x.FirstName, 
    x.Surname, 
    r.RegionName, 
    c.CountryName 
FROM 
    (Customer x LEFT JOIN Region r 
    ON r.ID=x.RegionID) 
    LEFT JOIN Country c 
    ON c.ID=r.CountryID 

还是你想知道如何使用MS-Access中的可视设计做?

1

访问可以完成大多数类型的连接(除了完整的外部连接)如果你正在做一个模糊的外部连接,我想知道你的3表连接吗?看看这个知识库文章的解释

support.microsoft.com/kb/124937

相关问题