1. ホーム
  2. mysql

[解決済み] NOT IN" リスト値のための MySQL 変数フォーマット

2023-07-17 02:32:43

質問

型のクエリで変数を設定しようとしておかしくなりそうです。

SET @idcamposexcluidos='817,803,495';

で使えるので

WHERE id_campo not in (@idcamposexcluidos)

いろいろな形式で変数を定義してみましたが、うまくいかず、上記のような具体的な例も見つからないようです。

SET @idcamposexcluidos='(817,803,495)';
...
WHERE id_campo not in @idcamposexcluidos


SET @idcamposexcluidos=817,803,495;

を実行しても成功しません。エラーを返すか、値を無視するかのどちらかです。

どのように解決するのですか?

を使用することはできません。 IN 節を使うことはできません。それはコンパイル時に シングル 文字列を IN 節に記述します。しかし IN 節には が必要です。 の値が必要です。

WHERE id_campo not in (@idcamposexcluidos)

は、以下のようにコンパイルされます。

WHERE id_campo not in ('817,803,495')

となっていますが、本来は

WHERE id_campo not in ('817','803','495')

この問題を解決するには、ダイナミック SQL を使用するか、MySQL の場合は FIND_IN_SET :

SET @idcamposexcluidos='817,803,495';
...
WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0

のような関数を使用しますが FIND_IN_SET() はインデックスを利用することができません。