ホームページ >データベース >mysql チュートリアル >複雑な SQL クエリで WHERE 句フィルタリングを正しく適用する方法

複雑な SQL クエリで WHERE 句フィルタリングを正しく適用する方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-19 10:16:091004ブラウズ

How to Correctly Apply WHERE Clause Filtering in Complex SQL Queries?

SQL ステートメントの WHERE パラメータの優先事項

次の SQL クエリは、「people」テーブルからデータを取得し、結果を「university=2」のレコードに限定するように設計されています。

<code class="language-sql">SELECT * FROM people 
WHERE
university='2' 
AND MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE) 
OR (fname LIKE '%box%' OR lname LIKE '%box%') </code>

ただし、このクエリでは、「university=2」条件を超える予期しない結果が生成されました。この問題を解決するには、「university=2」条件によって検索結果が厳密に制限されるようにする必要があります。

括弧を調整して操作の順序を制御します

このクエリの問題は、式の評価順序に影響を与える括弧の不適切な使用です。元のクエリでは、「AND」は「OR」よりも優先順位が高く、最初に評価されることを意味します。その結果、「university=2」は「MATCH (lname,fname) AGAINST ('massive' IN BOOLEAN MODE)」とのみ結合され、「fname/lname」テストとは結合されません。

これを修正するには、「university=2」が検索条件全体と組み合わされるように括弧を調整する必要があります。

<code class="language-sql">SELECT * FROM people 
WHERE
    university='2' 
    AND (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE) 
         OR fname LIKE '%box%' 
         OR lname LIKE '%box%') </code>

今回の調整により、「university=2」条件が括弧で囲まれるようになり、最初に評価してから 2 番目のかっこ内の検索条件と組み合わせる必要があることを示しています。これにより、「university=2」が true であるレコードのみが検索で考慮されるようになります。

以上が複雑な SQL クエリで WHERE 句フィルタリングを正しく適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。