首页 > 解决方案 > 选择具有相同列名的多个表

问题描述

我正在尝试对 Oracle 上的几个表进行查询(所有这些表都具有相同的列)。

让我们假设 TABLE_1、TABLE_2 和 TABLE_3 上的 column1、column2 和 column3。

我想在不使用 UNION 的情况下在单个语句上执行此操作。

就像是:

SELECT column1, 
       column2, 
       column3
 FROM (SELECT TABLE_NAME 
         FROM ALL_TABLES 
        WHERE TABLE_NAME LIKE 'TABLE_%'
      )

这可能吗?

谢谢!

标签: sqloracle

解决方案


这是一个糟糕的设计。VIEW您可以从该视图创建动态和查询。

DECLARE
     v_sql   VARCHAR2(4000);

BEGIN


     SELECT
          LISTAGG('SELECT column1,column2,column3 FROM ' || table_name,
               ' UNION ALL ' || CHR(10) ) WITHIN
          GROUP(
               ORDER BY table_name
          )
     INTO v_sql
     FROM all_tables
     WHERE table_name LIKE '%TABLE_%';

     EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW my_view AS ' || v_sql;
END;
/


Select * from my_view;

推荐阅读