2

私は Access の開発にかなり慣れていません。昨日、クエリを作成し、WHERE 部分で次のように「&」を使用しました。

WHERE ((condition A Is Null) & (condition B Is Null))

53ヒットを返しました。

それから私はそれを

WHERE ((condition A Is Null) AND (condition B Is Null))

71ヒットを記録。

「ビットごとの and」と「論理的な and」に関係していることは知っていますが、これを初心者 (英語) で説明してくれる人はいますか?

4

1 に答える 1

3

AND論理演算子です。 &連結演算子です。Access 2007 で使用できるさまざまな演算子の詳細については、演算子の表を確認してください。

アクションの違いを確認するには、これを table として開始しますWeinerDog

id field1 field2
 1 a
 2        y
 3

field1および列の空白はfield2Null 値を表します。

次に、次のクエリを実行します。

SELECT
    WeinerDog.id,
    WeinerDog.field1,
    WeinerDog.field2,
    (WeinerDog.field1 Is Null)
        & (WeinerDog.field2 Is Null) AS concat_result
FROM WeinerDog
WHERE
    (WeinerDog.field1 Is Null) & (WeinerDog.field2 Is Null);

そのクエリにより、次の結果セットが得られるはずです。

id field1 field2 concat_result
 1 a             0-1
 2        y      -10
 3               -1-1

列を調べconcat_resultます。連結された 2 つの式の真偽値である文字列が含まれます。これらの真理値は、True (-1) または False (0) のいずれかです。ただし、連結の結果は文字列でなければならないため、数値の真理値は結合される前にまず文字列としてキャストされます。

WHERE次に、句を調べます。WHEREdb エンジンは、句が として評価されるすべての行を提供しますTrue。実際には、-1 だけでなく、ゼロ以外の非 Null 値が の代わりになりTrueます。列からわかるようconcat_resultに、これらの行はどれも句Falseによってゼロ ( )として評価されないWHEREため、テーブル内のすべての行がクエリ結果セットに含まれます。

WHEREを代入ANDするように句を変更する&と、クエリは と の両方が Null である行 (id=3) のみを返しWeinerDogます。 field1field2

WHERE
    (WeinerDog.field1 Is Null) AND (WeinerDog.field2 Is Null);
于 2012-07-05T18:44:54.587 に答える