15

ステートメントが「属する」場所に応じてステートメントを除外しようとしている MySQL ステートメントがあります。

SELECT id, belongsto, title, madeby, sticky, locked, lastpost, posts
FROM threads
WHERE sticky !=1
AND belongsto !=12 OR sticky !=1 AND belongsto !=13
ORDER BY  `threads`.`date` DESC 
LIMIT 20
4

2 に答える 2

34

ORステートメントを論理的にグループ化するには、ステートメントを括弧で囲む必要があります。

WHERE sticky !=1
AND belongsto !=12 OR sticky !=1 AND belongsto !=13

次のようにする必要があります。

WHERE (sticky !=1 AND belongsto !=12)
OR (sticky !=1 AND belongsto !=13)

またはさらに良い:

 WHERE sticky !=1 AND belongsto NOT IN(12,13)
于 2013-07-30T17:30:13.223 に答える
3

と の属している行を除外することが目的の場合、 をに12置き換える必要があります。13ORAND

括弧が「欠落」しており、追加する必要があるという(選択した回答の)主張は間違っています。括弧を追加しても、ステートメントの変更は変わりません。演算子はANDすでに演算子よりも優先されていORます。)

WHERE sticky !=1
AND belongsto !=12 AND sticky !=1 AND belongsto !=13
                   ^^^

同じ述語を 2 回繰り返す必要がないため、次のように書き換えることができます。

WHERE sticky !=1
AND belongsto !=12 AND belongsto !=13

次のように書くこともできます。

WHERE sticky !=1
  AND NOT (belongsto =12 OR belongsto =13)

NOT IN (12,13)これは、 (選択した回答に示されているように)を使用して書き換えることもできます。

于 2013-07-30T18:04:29.987 に答える