2017-04-06 85 views
0

我已經使用Access數據庫查詢了一些查詢。它是一個帳戶數據庫,其中包含有關不同帳戶的信息。特別是每個賬戶的IBAN號碼。訪問SQL語法

一個查詢的是這一點,我們從IBAN號碼數據庫從進口Id - 表比較IBAN號碼:

SELECT CAMTaccounts.IBAN, CAMTaccounts.Comment 
FROM CAMTaccounts LEFT JOIN Id ON CAMTaccounts.[IBAN] = Id.[IBAN] 
WHERE (((Id.IBAN) Is Null)); 

我想我明白了SQL -language在一定程度上未來從SQL Server,但這個聲明,我不明白。

對我來說,這相當於寫作:

Select CAMTaccounts.* 
From CAMTaccounts Left Outer Join Id On CAMTaccounts.IBAN = Id.IBAN 
Where Id.IBAN Is Null 

,這一起,對我來說,沒有任何意義。

但很明顯,我沒有正確理解這一點。 我希望,你們中的一些人可以向我解釋我的有缺陷的邏輯。

謝謝。

+0

爲什麼你認爲它沒有意義? – DevelopmentIsMyPassion

+0

因爲我們加入= Id.IBAN並且之後指定Id.IBAN應該是Null,它永遠不會,因此連接是多餘的。我們只從左表CAMTaccounts獲取數據,但沒有來自正確Id表的數據。 – ahsoe

回答

2

該查詢值將從CAMTaccounts其中沒有匹配的Id行返回所有行。這就是所謂的反連接查詢。過多的括號確實沒有意義,很可能是用工具生成的。

+0

是的,我認爲它是使用Access中的查詢設計器生成的。 – ahsoe

3

假設CAMTaccounts.IBAN有值

A 
B 

而且Id.IBAN有價值觀

B 
C 

那麼這個查詢而不WHERE條款輸出這樣的事情

`CAMTaccounts.IBAN` | `Id.IBAN` 
--------------------------------- 
A     | NULL 
B     | B 

你可以很容易地看到究竟會由此產生的結果,如果增加Where Id.IBAN Is Null條款。

所以,這個查詢會給你從CAMTaccounts表結果,當IBAN列不包含Id.IBAN

+0

謝謝,Oto和Serg都給出了答案。 – ahsoe

+0

不客氣。 –