【问题标题】:MySQL: Export all rows with the same column data into same fileMySQL:将具有相同列数据的所有行导出到同一个文件中
【发布时间】:2009-02-26 10:13:10
【问题描述】:

假设您有一个包含数千行和 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 "select Name, Birthyear from Table where City = New York" > NewYork.csv

对于表中的每个城市,依此类推。 但是,如果您有数百个城市,手动执行它并不好玩。

【问题讨论】:

    标签: mysql


    【解决方案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 访问权限,这可能是个问题,除非存在服务器可以写入的网络文件系统,而您可以从另一台主机读取该文件系统。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多