2013-11-05 41 views
0

我有數百個MySQL表,我想創建一個每個MySQL表的第一列的ascii表。將不同MySQL表的列粘貼到ascii文件

從MySQL表

table A   table B ... table Z 
A1 A2 A3   B1 B2 B3  Z1 Z2 Z3 
A1 A2 A3   B1 B2 B3  Z1 Z2 Z3 
A1 A2 A3   B1 B2 B3  Z1 Z2 Z3 

到ASCII文件

A1 B1 ... Z1 
A1 B1 ... Z1 
A1 B1 ... Z1 

哪一個是更快的方法?

的表是幾百個,列有上千行,最重要的列具有相同的行數(所以我不認爲一個「加入」之前的出口是必要的)

的非常感謝

+0

如果你想'A1 B1 ... Z1'要上同一行你必須使用'JOIN'。而要使用連接,你必須以某種方式關聯你的表格。他們有沒有共同的專欄?如果不是的話,你至少應該確定性地對所有人排序。 – peterm

+0

我可以創建一個ID列並通過它們的ID加入。重點是這是一個緩慢的操作,我不能執行數百個連接。我想知道是否有比(列導出MySQL)+(bash'粘貼')更快的東西 –

回答

0

我不是一個bash的專家,但我做的事情階梯式地(其他專家可以編輯和改善我的答案)

#!/bin/bash 
mysql -uusrname -ppassword -Ddatabasename -s -e 'show tables' 
count=0 
while read tablenames 
do 
fieldname=$(mysql -uusrname -ppassword -Ddatabasename -s -e "desc $tablename" | head -2 | tail -1 | awk -F " " '{print $1}'); 
echo "$tablenames,$fieldname" >> tempfile 
done< $(mysql -uusrname -ppassword -Ddatabasename -s -e 'show tables') 
lastcount=$(wc -l tempfile) 
while read line 
do 
count=$(($count + 1)) 
if [ $count -eq 1 ] 
then 
echo "nothing to do" 
elif [ $count -lt $lastcount ] 
then 
echo $line | awk -F "," '{print "(select "$2 "from" $1")"}' >> sqlcommand.sql 
echo "union" >> sqlcommand.sql 
else 
    echo $line | awk -F "," '{print "(select "$2 "from" $1");"}' >> sqlcommand.sql 
done < tempfile 

mysql -uusrname -ppassword -Ddatabasename <<sqlcommand.sql>> outputasciifile.txt 
+0

根據你的更改用戶名密碼和數據庫名稱 – Ashish

相關問題