ホームページ >データベース >mysql チュートリアル >MySQL の WHERE IN () クエリが複数の値を持つレコードを返さないのはなぜですか?
MySQL WHERE IN () クエリが予期した結果を返さない
MySQL では、通常、WHERE IN () ステートメントは、レコード ベースの取得に使用されます。指定された値のセットに基づいて。ただし、予期した行が結果に返されない状況にユーザーが遭遇することがあります。
問題の説明:
ユーザーが「テーブル」からすべての行を選択するクエリを持っています。 " 指定されたリストに "id" 列が含まれるテーブル:
<code class="sql">SELECT * FROM table WHERE id IN (1,2,3,4);</code>
ユーザーは、レコードに複数の "id" 値 (例: 1 と 3 の両方) がある場合、その値が返されないことに注意しました。
問題の理解:
WHERE IN () ステートメントは、指定された値のリストを一連の OR 演算子に変換します:
<code class="sql">SELECT * FROM table WHERE id='1' or id='2' or id='3' or id='4';</code>
これは、「id」列が指定された値の 1 つに正確に一致する行のみが返されることを意味します。
解決策 1: FIND_IN_SET を使用する
Oneこの制限を克服するアプローチは、「id」列のデータ型を SET に変更してデータ構造を変更することです。これにより、列に複数の値を格納できるようになります。
FIND_IN_SET 関数を使用すると、SET 内に特定の値が存在するレコードを検索できます。
<code class="sql">SELECT * FROM table WHERE FIND_IN_SET('1', id);</code>
ただし、次のことが重要です。このソリューションはさらに複雑になるため、すべてのシナリオに適しているわけではないことに注意してください。
以上がMySQL の WHERE IN () クエリが複数の値を持つレコードを返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。