69

我的要求是存储查询的全部结果

SELECT * FROM document 
WHERE documentid IN (SELECT * FROM TaskResult WHERE taskResult = 2429)

到 Excel 文件。

4

8 回答 8

106

实现此目的的典型方法是导出为 CSV,然后将 CSV 加载到 Excel 中。
您可以使用任何 MySQL 命令行工具通过INTO OUTFILE在语句中包含子句来执行此操作SELECT

SELECT ... FROM ... WHERE ... 
INTO OUTFILE 'file.csv'
FIELDS TERMINATED BY ','

有关详细选项,请参阅此链接

或者,您可以使用 mysqldump 使用 --tab 选项将转储存储为分隔值格式,请参阅此链接。

mysqldump -u<user> -p<password> -h<host> --where=jtaskResult=2429 --tab=<file.csv> <database> TaskResult

提示:如果您没有指定绝对路径而是使用类似INTO OUTFILE 'output.csv'or的东西INTO OUTFILE './output.csv',它会将输出文件存储到由show variables like 'datadir';.

于 2012-04-24T11:58:05.590 回答
7

如果您有连接或关闭位置,则可以在查询结束后编写它的好例子:

 select 'idPago','fecha','lead','idAlumno','idTipoPago','idGpo'
 union all
(select id_control_pagos, fecha, lead, id_alumno, id_concepto_pago, id_Gpo,id_Taller,
id_docente, Pagoimporte, NoFactura, FacturaImporte, Mensualidad_No, FormaPago,
Observaciones from control_pagos
into outfile 'c:\\data.csv' 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n');
于 2013-07-17T13:04:27.240 回答
6

使用以下查询:

 SELECT * FROM document INTO OUTFILE 'c:/order-1.csv' FIELDS TERMINATED BY ','  
 ENCLOSED BY '"' LINES TERMINATED BY '\n';
于 2014-06-28T07:22:33.333 回答
4

就我而言,我需要将 sql 结果转储到客户端的文件中。这是从数据库中卸载数据的最典型用例。在许多情况下,您无权访问服务器或不想将结果写入服务器。

mysql -h hostname -u username -ppwd -e "mysql simple sql statement that last for less than a line" DATABASE_NAME > outputfile_on_the.client

当您有一个持续多行的复杂查询时,就会出现问题。您不能使用命令行轻松地将结果转储到文件中。在这种情况下,您可以将复杂的查询放入一个文件中,例如 longquery_file.sql,然后执行该命令。

mysql -h hn -u un -ppwd < longquery_file.sql DBNAME > output.txt

这对我有用。我唯一的困难是制表符;有时我用于 group_cancat(foo SEPARATOR 0x09) 将在输出文件中写为 '\t'。0x09 字符是 ASCII 制表符。但是这个问题并不是我们将 sql 结果转储到文件的方式所特有的。它可能与我的寻呼机有关。当您找到此问题的答案时,请告诉我。我会更新这篇文章。

于 2017-08-25T01:39:02.813 回答
0

我用来将mysql输出导出到文件的快速而肮脏的方法是

$ mysql <数据库名称> --tee=<文件路径>

然后<file_path>在我想要的任何地方使用导出的输出(您可以在 中找到)。

请注意,这是避免使用该secure-file-priv选项运行数据库的唯一方法,这会阻止使用INTO OUTFILE先前答案中的建议:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
于 2021-02-22T15:30:06.187 回答
0

就我而言,INTO OUTFILE由于 MySQL 用户与登录用户不同,因此无法正常工作。另外,我不能使用内联变体,因为我的查询很大。

我最终使用了它,它变得容易多了。这可能不支持 CSV 或任一输出,但如果您需要按原样输出,这将起作用。

mysql> tee /tmp/my.out;

来源:https ://alvinalexander.com/mysql/how-save-output-mysql-query-file/

于 2021-12-22T14:25:04.497 回答
0

对于SHOW DATABASESSHOW TABLES

INTO OUTFILE件事不会为SHOW TABLESSHOW DATABASES查询工作。

在这种情况下,您可以这样做:

  1. SHOW DATABASES
mysql -u <user> -p <password> -e 'SHOW DATABASES' > <path_to_file>
  1. SHOW TABLES
mysql -u <user> -p <password> -e 'SHOW TABLES FROM <db_name>' > <path_to_file>

提示:国旗-e代表execute

参考:

于 2021-04-06T14:20:03.460 回答
-1

这是一个老问题,但它仍然是 Google 上的首批结果之一。最快的方法是使用 ODBC 查询或 MySQL For Excel 将 MySQL 直接链接到 Excel。后者在对 OP 的评论中被提及,但我觉得它确实应该得到自己的答案,因为导出到 CSV 并不是实现这一目标的最有效方法。

ODBC 查询- 设置起来有点复杂,但更灵活。例如,MySQL For Excel 加载项不允许您WHERE在查询表达式中使用子句。此方法的灵活性还允许您以更复杂的方式使用数据。

MySQL For Excel - 如果您不需要对查询执行任何复杂的操作,或者如果您需要快速轻松地完成某些事情,请使用此加载项。您可以在数据库中创建视图以解决某些查询限制。

于 2018-02-25T18:43:28.407 回答