如何获取MySQL JOIN关联两张表的所有列名用作Excel导入表头
关于SHOW COLUMNS FROM能否实现需求的答复
可以实现,但因为你使用USING(SIGMA)做两表关联,查询结果会自动去重两张表共有的SIGMA列,所以使用该方法时需要手动删除重复的关联列。
具体实现方案
方案1:使用SHOW COLUMNS FROM实现
按如下步骤操作即可:
- 查询第一张表的所有列名:
SHOW COLUMNS FROM direction_prix_proxi.matrice_sigma;
- 查询第二张表的所有列名:
SHOW COLUMNS FROM direction_prix_proxi.volumestest;
- 合并两次查询返回的
Field列内容,删除重复的SIGMA列,得到的就是你需要的Excel表头。
方案2:新手友好的零出错方案(推荐)
不需要手动处理重复列,直接拿到和你实际查询结果完全一致的表头,只需要给你的原查询加LIMIT 0限制,执行后只会返回表头结构,不会返回任何业务数据,执行效率极高:
SELECT * FROM direction_prix_proxi.matrice_sigma ref LEFT JOIN direction_prix_proxi.volumestest using(SIGMA) LIMIT 0;
直接复制返回结果的列名即可作为Excel表头,列的顺序、数量和你实际导出的查询结果完全一致,不会出现匹配错误的问题。
方案3:批量导出逗号分隔表头(适合列数较多的场景)
如果两张表列数很多,手动复制麻烦,可以直接查询系统表批量生成逗号分隔的表头:
SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ',') AS excel_header FROM ( SELECT COLUMN_NAME, ORDINAL_POSITION FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'direction_prix_proxi' AND TABLE_NAME = 'matrice_sigma' UNION ALL SELECT COLUMN_NAME, ORDINAL_POSITION + 1000 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'direction_prix_proxi' AND TABLE_NAME = 'volumestest' AND COLUMN_NAME != 'SIGMA' ) t ORDER BY ORDINAL_POSITION;
执行后拿到的逗号分隔字符串,复制到Excel后使用「数据-分列」功能按逗号拆分,即可快速生成整行表头。
内容的提问来源于stack exchange,提问作者François Maurice
相关产品推荐
相关产品推荐

