首页 > 解决方案 > 从长 SQL 查询中提取所有表和相应的列

问题描述

我要解决的任务是从长 SQL 查询及其各自的列中获取所有表。

例如

SELECT 
t1.id, t1.gender, t1.name,
t2.age, t2.salary
FROM table1 t1
LEFT JOIN table2 t2
ON t1.id = t2.id

想要的输出:

{'table1': ['id', 'gender', 'name'], 'table2': ['age', 'salary']}

我考虑使用字符串拆分等获取所有表名并根据别名(如果可用)获取列。但是,如果有多个连接并且可能还有UNIONs,这将变得复杂。

有没有可用的图书馆或聪明的方法来做到这一点?

标签: sql

解决方案


如果这有帮助。从 All_TAB_COLUMN 中获取列名并对其进行透视。这仍然不是您想要的确切结果。

 select * from (
 select TABLE_NAME,COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME in 
 ('Table1','Table2'))
 pivot
 (
  max(table_name)
  for COLUMN_NAME in ('gender','name','age','salary')
  )
 order by 1;

推荐阅读