私は StuckAtWork のアプローチに同意します。ただし、元のアプローチで希望する結果が得られなかった理由を理解したい場合は、お手伝いできると思います。
状況を複雑にする可能性のある空の文字列に問題がある可能性があります。しかし、空の文字列が含まれているかどうかに関係なく、より基本的な考慮事項があります。
これが私のバージョンのEquipment
テーブルです。
EquipmentID title
1 one
2 two
3 three
そして、これが私のバージョンのDownPeriod
テーブルです。
ID EquipmentID text_field
1 1 one
2 2 two
3 Null
4 3 three
あなたのUpDate
フィールドを私のDownPeriod
テーブルに含めませんでした。あなたの問題とは無関係です。
SQL を新しい Access クエリに貼り付けWHERE
、サブクエリから句を破棄したところ、このクエリとまったく同じ結果が得られました --- 行が返されませんでした:
SELECT e.title
FROM Equipment AS e
WHERE
e.EquipmentID Not In (
SELECT EquipmentID
FROM DownPeriod
);
したがって、この状況を db エンジンの観点から検討してください。私のバージョンのDownloads
テーブルを使用すると、サブクエリからの一連の値 (1、2、Null、および 3) が含まれています。その値のリストにない場所Equipment
からの行を表示するように求めています。db エンジンは、その条件が である行のみを提供します。EquipmentID
True
Null
が問題です。それぞれについてEquipmentID
、その値がサブクエリ セットに存在しないかどうかを考慮すると、わかりません。それNull
は未知の値です...そして未知の値は、EquipmentID
それが考慮している電流と同じかもしれません...または何か他のものかもしれません. しかし、db エンジンは実際の値を認識していないため、条件を として評価できずTrue
、その行を結果セットに含めません。テーブルのすべての行で同じことが起こりEquipment
ます...したがって、クエリの結果セットは空です(行がありません)。
以下のような句Null
を使用して、サブクエリの結果セットから値を除外することで、目的の結果を得ることができます。WHERE
しかし、StuckAtWork の提案はより良い方法だと思います。
SELECT e.title
FROM Equipment AS e
WHERE
e.EquipmentID Not In (
SELECT EquipmentID
FROM DownPeriod
WHERE EquipmentID Is Not Null
);