2017-04-06 66 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

不客气。 –