MySQLはIN()関数とbash配列を使用して選択します。

MySQLはIN()関数とbash配列を使用して選択します。

配列でこれをどのように実行できますか? (配列を一般変数として保存しない)

VAR='String1 String2 String3'
SELECT * FROM db.table WHERE xy IN ( ${VAR// /, } );

動作しない例:

SELECT * FROM db.table WHERE xy IN ( ${ARRAY[@]// /, } );

答え1

アレイの拡張と交換はいうまく動作しますが、配列にスペースはありません要素。比較:

$ array=("one two" three four)
$ echo "${array[@]/ /, }"
one, two three four

コンマとスペース()を使用して,配列要素を再結合しようとしています。コピーを盗みたいGlen Jackmanの答えの1つこのような精神で:

$ array=(String1 String2 String3)
$ joined=$( set -- "${array[@]}"; IFS=,; echo "$*" )

その後、次のものを使用できます。

SELECT * FROM db.table WHERE xy IN "$joined"

たとえば、

$ array=("String1 String2" String3 String4)
$ joined=$( set -- "${array[@]}"; IFS=,; echo "$*" )
$ echo "$joined"
String1 String2,String3,String4

空白を含む配列要素(文字列)を引用するためにSQLで何をすべきかわかりません。

関連情報