假设你有一个包含数千行和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
等表格中的每个城市。 但如果您有数百个城市,那么手动完成它并不好玩。
答案 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或其他)分割城市列中名称更改的文件。无论如何,如果没有一些外部脚本,可能是不可能的。