我有一个大数据原始(青铜)表,大约有400列。为了准备将这个表移动到其他级别的表(或银级),我正在从原始表中拾取395列;但是,我不喜欢在SQL查询中键入所有399列的名称。
是否有任何解决方案在SQL中节省一些时间?
不是
SELECT col1, col2, col3, ..., col395 FROM table
之类的SELECT * EXCEPT col400 FROM table
SELECT CONCAT_WS(' ',
'SELECT',
GROUP_CONCAT(column_name),
'FROM database_name.table_name') query_text
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'database_name'
AND table_name = 'table_name'
AND column_name NOT IN ('excess_column_1', 'excess_column_2', ...);
插入数据库名和表名,填写要排除的列列表,执行查询-它将生成所需的查询文本。
您可以将其转换为动态组合和执行所需查询的存储过程,并调用此SP而不是查询。
第一步
EXPLAIN SELECT * FROM tbl;
SHOW WARNINGS;
然后编辑输出以删除您不想要的列。
(下次,考虑一下在一个表中有那么多列是否明智;400是非常高的)