1

重複の可能性:
MYSQLおよびOR多対多のテーブル

何らかの規制でデータベースからデータを取得するmysqlクエリを実行したいと思います。

どのエントリがvar1、var2、var3などに類似していて、指定されたIDよりも小さいかを確認したいと思います。

好き

SELECT * 
FROM database 
WHERE name = var1 
    OR name = var2 
    OR name = var3 
    AND id < 200

しかし、上記の行は実際には機能しません。また、エントリがなくなると(idが200より小さい場合)、いくつかのエントリが表示されます。

分かりますか?クエリは、必要な名前の1つを含み、IDよりも小さいデータを選択する必要があります。

論理的思考の問題があります...

4

3 に答える 3

13

論理演算子には優先順位があります。疑わしい場合は、括弧を使用してください。

あなたの場合:

SELECT * FROM database WHERE (name = var1 OR name = var2 OR name = var3) AND id < 200

ANDの優先順位が高いため、元のクエリは次のように解釈されました。

SELECT * FROM database WHERE name = var1 OR name = var2 OR (name = var3 AND id < 200)

アップデート

Rocketがコメントしたように、ステートメントは同じフィールドで動作するため、ORステートメントを要約することができます。INそうすることで、括弧が不要になります。

SELECT * FROM database WHERE name IN (var1,var2,var3) AND id < 200

それでも、必然的に複数の条件でクエリを作成するため、2つの元のクエリの違いを理解することが重要です。

于 2012-06-19T18:14:00.340 に答える
1

括弧を使用して、論理式の優先順位を設定します。

SELECT * FROM database_table WHERE (name = var1 OR name = var2 OR name = var3) AND id < 200
于 2012-06-19T18:16:41.647 に答える
0

以下をお読みください。

これら2つのクエリに違いはありますか?

ORとANDの括弧の重要性がわかります。

于 2012-06-19T18:21:56.107 に答える