2016-11-28 83 views
0

我试图在Microsoft Access中连接三个表格,允许使用Table 1作为我的主表的空条目,以便显示所有记录。访问多个左连接 - SQL代码

我有这个代码工作链接只有2个表。

SELECT [1].IDCode, [2].GiftDate, [2].FundId__1, [2].fund_name 
FROM 1 LEFT JOIN 2 ON [1].IDCode = [2].IDCode 
WHERE ((([1].IDCode) Is Not Null)); 

但是我想补充一点。我有这个,但每次我尝试运行它时,都会收到一个错误(无效的操作)。

SELECT [1].IDCode, [2].GiftDate, [2].FundId__1, [2].fund_name, [3].Rep_Type 
FROM (1 LEFT JOIN 2 ON [1].IDCode = [2].IDCode) LEFT JOIN 3 ON [1].IDCode = [3].IDCode 
WHERE ((([1].IDCode) Is Not Null)); 

我的代码现在是这个,我仍然收到无效操作。

SELECT [A].IDCode, [A].GiftDate, [A].FundId__1, [A].fund_name, [3].Rep_Type 
FROM 
(SELECT [1].IDCode, [2].GiftDate, [2].FundId__1, [2].fund_name 
FROM 1 
LEFT JOIN 2 
ON [1].IDCode = [2].IDCode) A 
LEFT JOIN 3 
ON [A].IDCode = [3].IDCode 
WHERE ((([1].IDCode) Is Not Null)); 
+0

回答这个问题:http://stackoverflow.com/questions/19367565/access-sql-inner-join-with-multiple-tables可以帮助你 –

+0

将在3的总是2S存在吗?如果这样加入虽然2.如果不()订单将很重要,并使这更多的挑战。 – xQbert

+0

3将不会始终存在于2. – blink444

回答

0

如果1 - > 2 - > 3,然后加入上第三应该是2.idcode = 3.idcode

SELECT [1].IDCode, [2].GiftDate, [2].FundId__1, [2].fund_name, [3].Rep_Type 
FROM (1 LEFT JOIN 2 ON [1].IDCode = [2].IDCode) LEFT JOIN 3 ON [2].IDCode = [3].IDCode 
WHERE ((([1].IDCode) Is Not Null)); 

但是,如果加入真的回来了1 ...

由于访问是挑剔的()的和连接回2.

所以我不迷失与()的我刚刚创建内嵌视图来管理连接。

SELECT [A].IDCode, [A].GiftDate, [A].FundId__1, [A].fund_name, [3].Rep_Type 
FROM 
(SELECT [1].IDCode, [2].GiftDate, [2].FundId__1, [2].fund_name 
FROM 1 
LEFT JOIN 2 
    ON [1].IDCode = [2].IDCode) A 
LEFT JOIN 3 
    ON [A].IDCode = [3].IDCode 
WHERE [A].IDCode Is Not Null; 
+0

1-> 2和1-> 3 我试过底层代码A而不是1/2,并且我仍然收到无效操作。 – blink444

+0

FundID_1应该有两个还是一个下划线?你好像有2个很奇怪。另一种方法是将A创建为视图,并从视图中选择访问权限可能由于某种原因不喜欢内联视图。 – xQbert