これは不可能です; 純粋なSQLではありません。これはMySQLのプロパティではありません-他のRDBMS-esもこの方法でクエリメタデータを提供しません。
純粋なSQLでこれを解決するために最も近い方法は、クエリをビューに変換してから、そのビューの情報を取得することです。
CREATE OR REPLACE VIEW _query
AS
SELECT login
FROM TableName
;
SELECT *
FROM information_schema.COLUMNS
WHERE table_schema = SCHEMA()
AND table_name = '_query'
;
このアプローチの問題は、ビュー名が一意である必要があることです。そのため、複数の同時ユーザーがいるアプリケーションでは、ビューの一意の名前を考え出すことが課題になります。これは、動的SQLを使用して可能です。
SET @name = CONCAT(_query, connection_id())
, @stmt = CONCAT(
' CREATE VIEW '
, @name
, ' AS SELECT login FROM Tablename'
)
;
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT *
FROM information_schema.columns
WHERE table_schema = schema()
AND table_name = @name
;
最後に、後でビューをクリーンアップする必要があります。
SET @stmt = CONCAT('DROP VIEW ', @name);
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
問題は、なぜSQL内でこれが必要なのかということです。通常、結果セットのメタデータはSQLクライアントで使用できます。通常、SQLステートメントを準備するときにドライバーまたはクライアントライブラリがこれを提供します。たとえば、JDBC http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#getMetaData()