ホームページ >データベース >mysql チュートリアル >MySQL の値のリストで「NOT IN」を正しく使用する方法は?
テーブル変数にカンマ区切りの値リストを設定し、それを変数として使用しようとする場合「NOT IN」フィルターを使用すると、一般的な障害が発生します。この操作の正しい構文と制限事項を理解することが重要です。
元のクエリで示されているように、変数をカンマ区切りの値のリストに設定します。
SET @idcamposexcluidos='817,803,495';
その後、それを「WHERE NOT IN」で使用しようとしました条件:
WHERE id_campo not in (@idcamposexcluidos)
多くの場合、エラーや意図しない結果が発生します。
問題の核心は、IN 句が個別の値を期待していることにあります。ただし、カンマ区切りの文字列をパラメータとして使用すると、事実上、IN 句内の単一の文字列にコンパイルされ、誤った比較が発生します。
これを克服するには、動的 SQL を使用するか、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 サイトの他の関連記事を参照してください。