SELECT语句从不同表中获取所有列

时间:2018-10-02 16:17:55

标签: sql database oracle plsql

我有多个以“ PLAYERS_”开头的表,它们包含一些我要立即检索的数据。将来我可能会添加更多以“ PLAYER_”开头的表,因此我想拥有一条select语句,该语句将为我提供这些表的所有数据,而无需我从所有这些表中进行选择。

这是我要使用的选择语句,但我认为它不准确:

SELECT * FROM (SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'PLAYER_%';

这一切都是为了让我得到子查询的结果,这是表的信息(不是我所需要的)。有没有其他方法可以实现我要达到的目标?

我要实现的目标与:

SELECT * FROM PLAYER_1, PLAYER_2, PLAYER_3; 

但是我想要以一种不必担心放置这样的表名的方式进行操作。

1 个答案:

答案 0 :(得分:6)

正如其他人所说,这是一个糟糕的设计。您仍然可以做这样的事情。

假设您仅从所有表中选择公共列,则可以创建一个动态视图,该视图将对所有现有播放器表进行UNION ALL

DECLARE
     v_select   CLOB;
BEGIN
     SELECT
          LISTAGG('SELECT col1,col2,col3 FROM ' || table_name,' UNION ALL ' || CHR(10) ) WITHIN GROUP
          (
               ORDER BY table_name
          )
     INTO v_select
     FROM user_tables WHERE table_name LIKE 'PLAYER_%';
     IF
          v_select IS NOT NULL
     THEN
          EXECUTE IMMEDIATE ' CREATE OR REPLACE VIEW v_player_all as ' || v_select;
     END IF;
END;
/

然后在每次添加新表时通过执行块(或将其放入过程)从视图中进行选择。

select * from v_player_all;

您也可以与user_tab_columns一起仅动态选择公共列。