次のコマンドを実行すると、構文エラーが発生します。
show columns from (select * from (select * from my_table) as T)
テーブルからではなく、自分が作成したクエリの列を表示するにはどうすればよいですか?
次のコマンドを実行すると、構文エラーが発生します。
show columns from (select * from (select * from my_table) as T)
テーブルからではなく、自分が作成したクエリの列を表示するにはどうすればよいですか?
Java を使用して、MySql クエリから列を取得しています。
Java で結果セットの列情報を取得する最良の方法は、次のResultSetMetaData
インターフェイスを使用することです。
PreparedStatement stmt = null;
ResultSet result = null;
ResultSetMetaData meta = null;
try {
stmt = con.prepareStatement("SELECT * FROM MyTable");
result = stmt.executeQuery();
} catch (SQLException e) {
System.out.println("SQLException: "+e.getMessage());
System.exit(1);
}
System.out.println("Successful query");
try {
meta = result.getMetaData();
System.out.println("Total columns: " + meta.getColumnCount());
System.out.println("Name of column 1: " + meta.getColumnName(1));
System.out.println("Type of column 1: " + meta.getColumnTypeName(1));
System.out.println("Name of column 2: " + meta.getColumnName(2));
System.out.println("Type of column 2: " + meta.getColumnTypeName(2));
} catch (SQLException e) {
System.out.println("SQLException: "+e.getMessage());
System.exit(1);
}
System.out.println("Successful metadata report");
私のテーブルは宣言されています:
CREATE TABLE `MyTable` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
サンプル Java コードの出力:
Successful query
Total columns: 2
Name of column 1: id
Type of column 1: BIGINT UNSIGNED
Name of column 2: name
Type of column 2: VARCHAR
Successful metadata report
名前とデータ型以外に、結果セット列に関するその他の情報を取得できます。ResultSetMetaData インターフェイスの完全なリファレンス ドキュメントについては、http://docs.oracle.com/javase/8/docs/api/java/sql/ResultSetMetaData.htmlを参照してください。
このステートメントは既存のテーブルのみを受け入れるようです。
そこで、クエリを使用して新しい一時テーブルを作成し、そこから列名を取得しました。
/*if the exporting table was created before, then delete it*/
DROP TABLE IF EXISTS exportTable;
/*create the temporary table (check if you have mySQL permission to do so)*/
CREATE TEMPORARY TABLE exportTable AS (your_query);
/*get result table (this is a table, the columns names are in the first column of this table ['Field'])*/
SHOW COLUMNS FROM exportTable;
一時テーブルはセッション コンテキストで作成され、セッションが閉じられると削除されます。同じことが SHOW COLUMNS テーブルにも当てはまります。これらのテーブルの作成がサーバー ディスクに与える影響を考慮することができます。
テーブルの作成時に TEMPORARY キーワードを使用できます。TEMPORARY テーブルは現在のセッションにのみ表示され、セッションが閉じられると自動的に削除されます。これは、2 つの異なるセッションが、互いに競合したり、同じ名前の既存の非 TEMPORARY テーブルと競合したりすることなく、同じ一時テーブル名を使用できることを意味します。(一時テーブルが削除されるまで、既存のテーブルは非表示になります。) 一時テーブルを作成するには、CREATE TEMPORARY TABLES 権限が必要です。
これを試して -
SHOW COLUMNS FROM (select * from my_table) T
または直接SHOW COLUMNS FROM my_table