Я просто делаю 2 запроса, сначала получаю вывод запроса (ограничение 1) с именами столбцов (без жесткого кода, без проблем с именами Joins, Order by, пользовательскими именами столбцов и т. д.), а во-вторых, для создания самого запроса и объединения файлов в один файл CSV:
CSVHEAD=`/usr/bin/mysql $CONNECTION_STRING -e "$QUERY limit 1;"|head -n1|xargs|sed -e "s/ /'\;'/g"`
echo "\'$CSVHEAD\'" > $TMP/head.txt
/usr/bin/mysql $CONNECTION_STRING -e "$QUERY into outfile '${TMP}/data.txt' fields terminated by ';' optionally enclosed by '\"' escaped by '' lines terminated by '\r\n';"
cat $TMP/head.txt $TMP/data.txt > $TMP/data.csv