我已经使用一些查询来创建Access
- 数据库。它是一个帐户数据库,包含有关不同帐户的信息。特别是每个帐户的IBAN号码。
其中一个问题是,我们将数据库中的IBAN编号与导入的Id
表中的IBAN编号进行比较:
SELECT CAMTaccounts.IBAN, CAMTaccounts.Comment
FROM CAMTaccounts LEFT JOIN Id ON CAMTaccounts.[IBAN] = Id.[IBAN]
WHERE (((Id.IBAN) Is Null));
我以为我理解SQL
语言在某种程度上来自SQL Server,但是这句话,我无法理解。
对我而言,这相当于写作:
Select CAMTaccounts.*
From CAMTaccounts Left Outer Join Id On CAMTaccounts.IBAN = Id.IBAN
Where Id.IBAN Is Null
对我而言,这种加入没有任何意义。
但显然,我并没有正确理解这一点。 我希望,你们中的一些人可以向我解释我的错误逻辑。
感谢。
答案 0 :(得分:3)
假设CAMTaccounts.IBAN
具有值
A
B
Id.IBAN
有值
B
C
然后这个查询WITHOUT WHERE
子句输出类似这样的内容
`CAMTaccounts.IBAN` | `Id.IBAN`
---------------------------------
A | NULL
B | B
如果添加Where Id.IBAN Is Null
子句,您可以轻松查看会产生什么结果。
因此,当CAMTaccounts
列不包含IBAN
列的值
Id.IBAN
表的结果
答案 1 :(得分:2)
此查询将返回CAMTaccounts
中没有匹配Id
行的所有行。这称为反连接查询。过多的括号实际上没有意义,很可能是用工具生成的。