私は 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 エンジンは、その条件が である行のみを提供します。EquipmentIDTrue
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
);