2016-03-01 86 views
0

我正在使用Access 2007,我比SQL更適合使用SQL。在閱讀本網站上與MS Access中的連接相關的幾個線程之後,我想我正確地做了這件事,但我被告知我的where子句中有一個語法錯誤,下面是新的改進版本:MS Access 2007語法:從加入加入加入其中

FROM ((Patron P 
    INNER JOIN Patron_Address PA1 ON 
    (PA1.patron_id = P.patron_id) 
    LEFT JOIN Patron_Address PA2 ON 
     (PA2.patron_id = P.patron_id)  
    LEFT JOIN Patron_Address PA3 ONL 
     (PA3.patron_id = P.patron_id) 
    where PA1.address_type = '1'AND 
     PA2.address_type = '2' AND 
     PA3.address_type = '3'; 

讓我解釋一下我的目標 靠山元組有1-3 patron_address元組 這些地址行有三種類型:。

  1. 永久
  2. 臨時
  3. 電子郵件

此外,

  • 的一位顧客必須有一個patron_address一行address_type 1
  • 的一位顧客可以具有patron_address一行address_type 2
  • 的一位顧客可以具有patron_address一行address_type 3

我需要獲取每個patron_id的所有地址行的地址信息。來自每個地址行的數據需要放入查詢結果集中的列中,然後我需要將其轉換爲製表符分隔的文件以發送給供應商。

這就是爲什麼我正在做一個連接,這就是爲什麼我需要使用標準。 從邏輯上講,每個連接的結果應該有它自己的where子句,但顯然這是不允許的。所以我有一個where子句列出了三個條件。存在的問題是這三個條件中只有一個適用於每個連接。

那麼我需要在概念上和語法上做些什麼來獲得我想要的結果呢?感謝最近幾天這個怪物的幫助。我想,我正在接近。然後再次,我可能只是移動我的錯誤。

+0

我已經使SQL呈現得更好一些,但它可能仍然可以對縮進進行整理。使用預覽工具並確保您的問題看起來不錯可能有助於獲得答案。 – Rook

+0

*我比SQL更適合使用SQL *有趣的評論給出了Access運行SQL,這是一種特殊用途的聲明式編程語言。 – Parfait

回答

0

可否請您嘗試以下查詢: -

FROM Patron P 
INNER JOIN Patron_Address PA1 ON PA1.patron_id = P.patron_id) 
LEFT JOIN Patron_Address PA2 ON PA2.patron_id = P.patron_id 
LEFT JOIN Patron_Address PA3 ON PA3.patron_id = P.patron_id 
where PA1.address_type = '1' 
AND PA2.address_type = '2' 
AND PA3.address_type = '3'; 

從技術上講,我已刪除了所有的支架和最後一個「ON」的字母「L」。你輸入了「ONL」而不是「ON」

+0

在格式化代碼塊時,我不知道LEFT中的L已經走了。你的from子句的版本在From中產生了「語法錯誤」。我添加了一個(在第一個表之前,現在它在下一個JOIN中給我一個錯誤:FROM(Patron P INNER JOIN Patron_Address PA1 ON PA1.patron_id = P.patron_id) LEFT JOIN Patron_Address PA2 ON PA2.patron_id = P.patron_id LEFT JOIN Patron_Address PA3 ON PA3.patron_id = P.patron_id 其中PA1.address_type ='1' AND PA2.address_type ='2'AND PA3.address_type ='3'; – DocDuncan

+0

我添加了第二個parens加入,目前我還沒有收到有關加入的投訴,現在它抱怨第一列,「選擇PATRON。TITLE「,因爲它要求我輸入一個TITLE,它應該選擇不要求輸入,所以我不知道我現在做了什麼錯誤,完整的查詢太長而無法發表評論,所以我是 – DocDuncan

+0

這是我目前沒有收到錯誤的FROM子句:FROM((Patron P INNER JOIN Patron_Address PA1 ON PA1.patron_id = P.patron_id) LEFT JOIN Patron_Address PA2 ON PA2.patron_id = P.patron_id) LEFT JOIN Patron_Address PA3 ON PA3.patron_id = P.patron_id – DocDuncan