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

标签 sql database oracle plsql

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

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

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

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

我要实现的目标与:

SELECT * FROM PLAYER_1, PLAYER_2, PLAYER_3; 

但我想以一种我不应该担心那样放置表名的方式来做。

最佳答案

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

假设您只从所有表中选择公共(public)列,您可以创建一个动态 View ,它对所有现有玩家表执行 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;
/

然后每次添加新表时通过执行 block (或将其放入过程)从 View 中选择。

select * from v_player_all;

您还可以加入 user_tab_columns 以仅动态选择公共(public)列。

关于sql - SELECT 语句从不同的表中获取所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52612429/

相关文章:

php - 将两个查询合并为一个查询 Laravel

java - Web 应用程序无法建立与数据库的连接

mysql - 使用jsp插入mysql数据库抛出异常

sql - 带有 select 语句的 Oracle SQL View

oracle - oracle 11gr1 中 xmltype 列的最大大小?

mysql - 由于 JOINED 表的原因,显示的 SQL 行受到限制

sql - 无法获取分配金额总和以添加分组分配

mysql - 使用迭代器删除 MySQL 表

oracle - 对特定列使用 DISTINCT

python - 使用窗口函数在 Postgres 上使用 SqlAlchemy 限制查询