1

ユーザー定義変数について奇妙なことに気づきました。

私がこのテーブルを持っているとしましょう:

 num_table
+---------+
| numbers |
|    3    |
|    6    |
|    9    |
+---------+

カンマ区切りのリストを作成して、次のようにユーザー定義変数に格納できます。

SELECT @var := GROUP_CONCAT `numbers` from num_table;

に値3,6,9を割り当てます@var

そして、ここに奇妙な部分があります。ランニング

SELECT 3 IN (@var)

1を返しますが、実行中

SELECT 6 IN (@var)

0を返します。

うまくいくか、うまくいかないかのどちらかだと私には思えます。リストの最初の番号でのみ機能する理由はありますか?

4

2 に答える 2

2

変数と一緒に使用することはできずIN ()、その変数をリストとして扱うことはできません。実際のリスト (おそらく変数の) のみを使用できます。つまりIN (1, 2, 3)、またはIN (@var1, @var2, @var3)

「3、6、9」が含まれている場合はどちらも機能しないはずです@var-したがって、「3」が含まれていると思わ@varれますが、その内容を確認できますか?

マーティンはキャスティングで何かに取り組んでいる可能性があります-私'3' IN (@var)は何も返さないに違いない

于 2011-05-10T16:01:50.173 に答える
1

IN ()文字列変数では使用できませんがFIND_IN_SET()、代わりに使用できます。これは、まさにこの目的に役立ちます。

SELECT FIND_IN_SET(6, @var)

2 - 2 番目の位置を返します

SELECT FIND_IN_SET(7, @var)

NULL を返します - 一致しません

于 2012-07-09T22:38:58.153 に答える