如何将ID列表传递到MySQL select语句中

时间:2014-04-17 23:00:55

标签: mysql macos xargs

我有一个带有ID列表的文本文件,如下所示:

  

123
     456个
     789

我想在查询中使用它们来查找有关这些项目的更多信息。到目前为止,我没有成功尝试过:
    awk '{print $1;}' 'pathto/file.txt' | xargs echo "SELECT * FROM table WHERE id='{}');" | mysql -u uname -p database

1 个答案:

答案 0 :(得分:2)

IDS=$(cat /path/to/file)
IDS=$(echo $IDS | sed 's/\s\s*/,/g')
#or IDS=$(echo $IDS | awk '{$1=$1}1' RS= OFS=,) on OSX
echo "SELECT * FROM table WHERE id in ($IDS)" | mysql -u uname -p database

第1行将id加载到变量中,这允许在第2行中轻松替换换行符,然后用逗号替换空格以使用IN ()构造。

编辑1和2查看评论

编辑3

OSX上的

(我不使用或无权访问)似乎sed不喜欢我的正则表达式。正如OP指出的那样,使用IDS=$(echo $IDS | awk '{$1=$1}1' RS= OFS=,)作为第2行可以解决这个问题。