我正在创建一个实用程序,它允许用户输入 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 中执行此操作?
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";"table";"type";"possible_keys";"key";"key_len";"ref";"rows";"Extra"
"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 可以接受。
我是一名优秀的程序员,十分优秀!