0

WHEREを使用してクエリを実行します

"COMPUTERCLASSROOM_SLOT1=0またはCOMPUTERCLASSROOM_SLOT2=0およびCOMPUTERCLASSROOM_DONE=1"

要件を満たしたすべての行を返しますが、これはテーブル行のデータです

列の表示によると、ここに行の値があります

ROW 1 =                0                       0                          0    
ROW 2 =                1                       0                          0   
ROW 3 =                1                       2                          1   
ROW 4 =                1                       3                          0   
ROW 5 =                1                       4                          1   
ROW 6 =                0                       5                          1   
ROW 7 =                0                       0                          1   

彼ら全員が戻ってきます..それはなぜですか?ANDでORを変更した場合、クエリに続いて行7が返されます...これは奇妙なことです。1つのクエリでORとANDが必要です。これは、ターゲットがいずれかで少なくとも0の行を返すことであるためです。 SLot1またはSlot2、およびDONE = 1

4

3 に答える 3

2

そのはず

WHERE (COMPUTERCLASSROOM_SLOT1 = 0 OR COMPUTERCLASSROOM_SLOT2 = 0) AND 
       COMPUTERCLASSROOM_DONE = 1
于 2013-01-11T16:11:07.587 に答える
1

根本的な原因

AND は乗算として評価されます。OR は加算として評価されます。したがって、算術優先順位規則 (PEMDAS) に従って、OR を評価する前に AND が評価されます。

Example: 1 OR 0 is 1 + 0 = 1; 1 AND 0 is 1 * 0 = 0;

そう

X or X or X and X is grouped automatically as X or X or (X and X). 

括弧を使用すると、混乱が回避されるだけでなく、コードが読みやすくなります。

于 2013-01-11T16:23:40.933 に答える
1

@Jack が既に指摘したように、問題は括弧を使用していないためです。したがって、クエリは、期待しているものとは論理的に異なると評価されます。

@JW. のスニペットを試すと、完全に機能します。

WHERE (COMPUTERCLASSROOM_SLOT1 = 0 OR COMPUTERCLASSROOM_SLOT2 = 0) AND (COMPUTERCLASSROOM_DONE = 1) 
于 2013-01-11T16:14:29.693 に答える