选择多个具有相同列名的表

时间:2018-09-05 17:58:13

标签: sql oracle

我正在尝试对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_%'
      )

这可能吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个糟糕的设计。您可以创建动态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;