2009-02-26 16 views
1

假設你有一個大表數千行3列,看起來像這樣:MySQL的:導出使用相同的列數據的所有行到同一個文件

Name    City    Birthyear 

Egon Spengler  New York   1957 
Mac Taylor   New York   1955 
Sarah Connor  Los Angeles  1959 
Jean-Luc Picard  La Barre   2305 
Ellen Ripley  Nostromo   2092 
James T. Kirk  Riverside   2233 
Henry Jones   Chicago   1899 
Jason Bourne  Paris    1971

...... 和等等。是否可以按城市將人們分類爲單獨的文件? 例如,如果表中有100個或更多城市,是否有一個查詢會創建100個或更多包含人名和出生年份的文件?對於城市數量較少的人能夠使用

-e「從表中選擇名稱,Birthyear其中市=紐約」> NewYork.csv

等爲表中的每個城市。 但是,如果您擁有數百個城市,手動執行操作並不好玩。

回答

1

從病人和錯誤的部門(可能含有語法錯誤,這只是給你的扭曲的可能性的想法):

SELECT concat("SELECT name, birthyear from table where city = '", 
          city, 
          "' into outfile '", 
          city,"';") 
    FROM table 

將在QUERY1.SQL,則:

mysql <query1.sql> query2.sql 
mysql < query2.sql 

編寫一個查詢,可以即時生成查詢,然後對數據庫執行結果查詢。這絕對屬於「快速和骯髒」類別。

還要注意查詢在MySQL服務器上執行,這可能與您執行MySQL客戶端的位置不同。如果是這樣,你需要一些方法來獲得結果文件。如果您沒有對服務器的shell訪問權限,這可能是一個問題,除非服務器可以寫入的網絡文件系統可以從另一臺主機讀取。

+0

太棒了!非常感謝 :) – Daniel 2009-03-03 10:30:35

0

我認爲你最好的選擇是編寫一個腳本,在每列上做一個SELECT DISTINCT,並使用結果來編寫你建議的表單的查詢。

0

你也可以把「按城市排序的姓名,生日年選」放到csv中,然後用一個小腳本(Perl或其他)來拆分城市列中名稱改變的文件。無論如何,沒有一些外部腳本可能是不可能的。

相關問題