2017-04-06 5 views
0

私はいくつかのクエリでAccessのデータベースを守っています。これは、異なるアカウントに関する情報を持つアカウントデータベースです。具体的には、各口座のIBAN番号。Access SQLの構文

クエリの一つは、我々は-table輸入IdからIBAN-番号をデータベースからIBAN-数を比較ところ、この、次のとおりです。私は私が来てある程度SQL -languageを理解思っ

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

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テーブルから生じる得られます。これは、Anti-joinクエリと呼ばれます。余分な括弧は実際には意味がなく、おそらくツールで生成されます。

+0

はい、私はAccessでQuery Designerで生成されたと思います。 – ahsoe

3

CAMTaccounts.IBANは値

A 
B 

そしてId.IBANは値

B 
C 

を持っている次にWHERE句を使用せずに、このクエリはあなたが簡単になるかを見ることができます。この

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

のようなものを出力したとこの結果、add Where Id.IBAN Is Null節。

ので、このクエリはIBAN列がありませんId行に一致しているCAMTaccountsからすべての行を返しますId.IBAN

+0

お返事ありがとうございました。 – ahsoe

+0

ようこそ。 –