如何获取给定mysql查询的列名?

时间:2011-03-25 23:06:37

标签: mysql

我正在创建一个实用程序,允许用户输入SQL查询以便将数据导入我的数据库。

第一步是显示结果字段列表,以便用户可以将它们路由到目标字段。

当用户从MSSQL导入时,我可以使用SET FMTONLY ON来获取查询在运行时产生的输出列列表(假设查询首先有效)。

我无法为MySQL找到这样做的方法。 EXPLAIN未列出结果字段。


给出以下查询:

SELECT CONCATENATE(first_name, " ", last_name) AS name, age, foo
FROM customers
ORDER BY name ASC;

我最终只需要获取输出字段列表,如下所示:

{ "name", "age", "foo" }

我如何在MySQL中执行此操作?

3 个答案:

答案 0 :(得分:3)

SET FMTONLY ON仍然需要您手动获取列名和类型,它只生成一个空结果集。

对于MySQL,在某处添加WHERE FALSE

SELECT CONCATENATE(first_name, " ", last_name) AS name, age, foo
FROM customers
WHERE FALSE
ORDER BY name ASC;

你得到了这个可爱的执行计划

  

“ID”; “SELECT_TYPE”; “表”, “类型”, “possible_keys”; “键”, “key_len”; “REF”, “行” 的 “额外” <登记/>   “1”;“SIMPLE”; NULL; NULL; NULL; NULL; NULL; NULL; NULL; “Impossible WHERE”

然后像使用MSSQL一样解析列set fmtonly on

<小时/> 对于复杂查询(嵌套,分组依据,限制编辑),请将其包装在子查询

select * from (
   <your wonderful brilliant complex query>
) x where false
如果内部查询包含没有TOP的ORDER BY,那么MSSQL会抱怨,MySQL可以使用它。

答案 1 :(得分:1)

我认为您需要查看resultsetmetadata。我带有列数,列名和一些关于结果集的内容。

答案 2 :(得分:0)

我认为您正在寻找DESC {table_name}