MySQL:将具有相同列数据的所有行导出到同一文件中

时间:2009-02-26 10:13:11

标签: mysql

假设你有一个包含数千行和3列的大表,看起来像这样:

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“选择姓名,来自表格的姓名,其中City = New York”> NewYork.csv

等表格中的每个城市。 但如果您有数百个城市,那么手动完成它并不好玩。

3 个答案:

答案 0 :(得分: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访问权限,则可能会出现问题,除非服务器可以写入的网络文件系统可以从其他主机读取。

答案 1 :(得分:0)

我认为最好的办法是编写一个小脚本,在每列上执行SELECT DISTINCT,并使用结果编写您建议的表单的查询。

答案 2 :(得分:0)

您还可以将“按城市表顺序选择名称,生日年份”放入csv,然后使用小脚本(Perl或其他)分割城市列中名称更改的文件。无论如何,如果没有一些外部脚本,可能是不可能的。