MySQL クエリを使用する場合、特定の値を除外する必要がある状況がよく発生します。 「NOT IN」演算子を使用して結果セットから取得します。これを実現するには、除外された値のリストを保持する変数を設定します。ただし、クエリを正常に実行するには、変数を正しい形式で定義することが重要です。
次のクエリについて考えてみます。
SET @idcamposexcluidos='817,803,495'; WHERE id_campo not in (@idcamposexcluidos)
上記のクエリは、@idcamposexcluidos という変数を次のように設定しようとします。値のリストを作成し、その変数を「NOT IN」句で使用します。ただし、変数が適切な形式で定義されていない場合、エラーまたは不正確な結果が発生する可能性があります。
「NOT IN」演算子にはかっこ内の個別の値のリストが必要ですが、変数 @idcamposexcluidos にはカンマが含まれています。 - で区切られた文字列。この不一致により、クエリのコンパイルと実行が正しく行われなくなります。
この問題を解決するには、主に次の 2 つのアプローチがあります。
1.ダイナミック SQL:
ダイナミック SQL を使用すると、除外された値のリストを含むクエリ文字列を実行時に動的に構築できます。このアプローチにより、クエリが適切にフォーマットされて実行されることが保証されます。
SET @sql = CONCAT('WHERE id_campo not in (', @idcamposexcluidos, ')'); PREPARE stmt FROM @sql; EXECUTE stmt;
2. FIND_IN_SET 関数:
MySQL は、カンマ区切りの文字列内に値が存在するかどうかを確認するために使用できる FIND_IN_SET という関数を提供します。この関数を使用すると、変数を適切なリストに変換する必要がなくなります。
SET @idcamposexcluidos='817,803,495'; WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0
FIND_IN_SET 関数はこのシナリオを処理する便利な方法ですが、インデックスを利用できないことに注意することが重要です。チェックを実行するとき。これにより、大規模なデータセットのパフォーマンスが低下する可能性があります。
以上がMySQL の「NOT IN」演算子で変数を適切に使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。