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

sam*_*amg 1 sql database oracle plsql

我有多个以"PLAYERS_"开头的表,它们包含一些我想要一次检索的数据.我可能会在将来添加更多以"PLAYER_"开头的表,所以我希望有一个select语句,它可以获取这些表的所有数据,而无需从所有这些表中进行选择.

这是我正在尝试使用的select语句,但我认为它不准确:

SELECT * FROM (SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'PLAYER_%';
Run Code Online (Sandbox Code Playgroud)

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

我想要实现的目标与:

SELECT * FROM PLAYER_1, PLAYER_2, PLAYER_3; 
Run Code Online (Sandbox Code Playgroud)

但是我想以一种我不应该担心像这样放表名的方式来做这件事.

Kau*_*yak 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;
/
Run Code Online (Sandbox Code Playgroud)

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

select * from v_player_all;
Run Code Online (Sandbox Code Playgroud)

您也可以加入以user_tab_columns仅动态选择公共列.