2016-11-28 1 views
0

Я пытаюсь объединить три таблицы вместе в доступе к Microsoft, разрешая пустые записи с 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)); 

Но я хочу добавить третью. У меня есть это, но каждый раз, когда я пытаюсь запустить его, я получаю сообщение об ошибке (Invalid Operation).

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

Will 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 ...

Поскольку доступ придирчив о() «s и присоединение обратно 2.

Так что я не заблудиться с()» s Я только что создал вложенное представление для управления стыки.

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

Должно ли быть два или 1 знак подчеркивания для FundID_1? у вас, похоже, 2, что странно. Альтернативой было бы создание A как вида и выбор из представления, возможно, доступ по какой-то причине не понравится встроенному представлению. – xQbert

Смежные вопросы