gpt4 book ai didi

java - 如何从 SELECT 查询(而不是表)中显示列?

转载 作者:IT老高 更新时间:2023-10-29 00:07:52 25 4
gpt4 key购买 nike

运行以下命令时出现语法错误:

show columns from (select * from (select * from my_table) as T)

如何显示我编写的查询而不是表中的列?

最佳答案

方法一:临时表

已经发布的关于使用临时表的答案通常是最合适的解决方案。但有一点很重要,如果查询按原样运行,所有连接等都将被处理,这在某些情况下可能需要很长时间。幸运的是,MySQL 允许 LIMIT 0 不返回任何行,并且 documentation指出这“快速返回一个空集”。以下存储过程将通过将 SQL 查询字符串作为输入、用 LIMIT 0 包装它、运行动态查询以生成临时表然后显示其列来为您完成这项工作:

CREATE PROCEDURE showColumns(IN sqlToShow TEXT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS tempTable;
SET @sqlLimit0 = CONCAT('CREATE TEMPORARY TABLE tempTable AS (SELECT * FROM (',
sqlToShow, ') subq LIMIT 0)');
PREPARE stmt FROM @sqlLimit0;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SHOW COLUMNS FROM tempTable;
END;

重要的一点是传入的查询不应该在末尾有分号。 (如有必要,可以修改存储过程以删除结尾的分号,但我想保持简单。)

这是一个现场演示,展示了它的实际效果:http://rextester.com/NVWY58430

方法 2:INFORMATION_SCHEMA.COLUMNS

SHOW COLUMNS 返回的相同信息也可以直接从 INFORMATION_SCHEMA.COLUMNS 中获取。表:

SELECT TABLE_NAME AS `Table`,
COLUMN_NAME AS `Field`,
COLUMN_TYPE AS `Type`,
IS_NULLABLE AS `Null`,
COLUMN_KEY AS `Key`,
COLUMN_DEFAULT AS `Default`,
EXTRA AS `Extra`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = SCHEMA() -- This uses the current schema
AND `TABLE_NAME` IN ('table1', 'table2', 'etc.');
-- ...or could go even further and restrict to particular columns in tables if desired

上面的缺点是需要手动输入表(和可选的列)名称并且不在 SELECT 中显示别名,但它完成了基本工作。它的优点是不需要用户有创建临时表的权限,并且返回的信息可以扩展以提供进一步的列信息,例如最大字符长度、数字精度/小数位数、列注释等。

关于java - 如何从 SELECT 查询(而不是表)中显示列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3716476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com