如何合并两个SQL查询,生成包含表名等四列的结果表?
合并SQL查询获取表元数据信息
你可以通过两种简单的方式合并这两个查询,得到包含所需四列的结果:
方法一:子查询+交叉连接(CROSS JOIN)
因为两个查询都只返回单行结果,交叉连接会直接把它们合并成一行:
SELECT 'abc.gcc_case' AS Table_Name, t.Last_Create_Date, t.Last_Update_Date, c.Columns_Count FROM ( -- 获取表的最后创建和更新日期 SELECT MAX(create_date) AS Last_Create_Date, MAX(update_date) AS Last_Update_Date FROM abc.gcc_case ) t CROSS JOIN ( -- 获取表的列数,加上schema过滤避免同名表混淆 SELECT COUNT(*) AS Columns_Count FROM information_schema.columns WHERE table_name = 'gcc_case' AND table_schema = 'abc' ) c
方法二:标量子查询(更简洁)
直接把列数查询作为字段嵌入主查询:
SELECT 'abc.gcc_case' AS Table_Name, MAX(create_date) AS Last_Create_Date, MAX(update_date) AS Last_Update_Date, -- 标量子查询返回单行单列,直接作为列值 ( SELECT COUNT(*) FROM information_schema.columns WHERE table_name = 'gcc_case' AND table_schema = 'abc' ) AS Columns_Count FROM abc.gcc_case
注意事项:
- 原查询里的
DISTINCT是多余的,MAX()聚合函数本身会返回单行结果,无需去重。 - 必须加上
table_schema = 'abc'条件,否则若其他schema存在同名表,列数统计会出错。
内容的提问来源于stack exchange,提问作者Marina
相关产品推荐
相关产品推荐

