私の要件は、クエリの結果全体を保存することです
SELECT * FROM document
WHERE documentid IN (SELECT * FROM TaskResult WHERE taskResult = 2429)
Excelファイルに。
これを実現する一般的な方法は、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'
またはINTO OUTFILE './output.csv'
のようなものを使用すると、出力ファイルが。で指定されたディレクトリに保存されshow variables like 'datadir';
ます。
良い例は、クエリの終了後にそれを書き込む場合で、結合がある場合、または近くにある場合です。
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');
以下のクエリを使用します。
SELECT * FROM document INTO OUTFILE 'c:/order-1.csv' FIELDS TERMINATED BY ','
ENCLOSED BY '"' LINES TERMINATED BY '\n';
私の場合、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文字はASCIITABです。ただし、この問題は、SQLの結果をファイルにダンプする方法に固有のものではありません。ポケットベルに関連している可能性があります。この問題の答えを見つけたら教えてください。この投稿を更新します。
mysql出力をファイルにエクスポートするために私が使用する迅速で汚い方法は
$ mysql <database_name> --tee = <file_path>
次に、エクスポートされた出力(にあります<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
SHOW DATABASES
と_SHOW TABLES
INTO OUTFILE
物事は機能せず、クエリSHOW TABLES
を実行しません。SHOW DATABASES
その場合、次のことができます。
SHOW DATABASES
mysql -u <user> -p <password> -e 'SHOW DATABASES' > <path_to_file>
SHOW TABLES
mysql -u <user> -p <password> -e 'SHOW TABLES FROM <db_name>' > <path_to_file>
ヒント:フラグ
-e
はexecute
参照:
私の場合、INTO OUTFILE
MySQLユーザーがログインユーザーとは異なるため、機能しませんでした。また、クエリが非常に大きいため、インラインバリアントを使用できませんでした。
私はこれを使うことになりました、そしてそれはとても簡単でした。これはおそらくCSVまたはどちらの出力もサポートしませんが、そのまま出力する必要がある場合は、これで機能します。
mysql> tee /tmp/my.out;
ソース:https ://alvinalexander.com/mysql/how-save-output-mysql-query-file/
これは古い質問ですが、それでもGoogleでの最初の結果の1つです。これを行う最も速い方法は、ODBCクエリまたはMySQLForExcelを使用してMySQLをExcelに直接リンクすることです。後者はOPへのコメントで言及されましたが、CSVへのエクスポートはこれを達成するための最も効率的な方法ではないため、それは本当に独自の答えに値すると感じました。
ODBCクエリ-これはセットアップが少し複雑ですが、はるかに柔軟性があります。たとえば、MySQL For ExcelアドインではWHERE
、クエリ式で句を使用できません。この方法の柔軟性により、より複雑な方法でデータを使用することもできます。
MySQL For Excel-クエリで複雑なことをする必要がない場合、または何かをすばやく簡単に実行する必要がある場合は、このアドインを使用します。データベースにビューを作成して、クエリの制限の一部を回避できます。