SQL Oracle - 从 100 个表中联合相同 ID 列以查找最大值

问题描述 投票:0回答:1

我需要创建一个选择查询来查找 ID 列中的最高值,其中序列在包含数百个表的整个数据库中“共享”。 (请注意,该序列在 SQL Developer 中并不作为正式序列存在)

数据库(我没有创建/拥有)为任何连续表中的每条记录创建一个唯一的 ID,并附加后缀。

即 表1

ID
0001AAA
0002AAA
0003AAA
0006AAA

表2

ID
0004BBB
0005BBB
0007BBB
  • 因此您可以看到所有表格都使用了数字序列。

我想找到整个数据库的数字序列(忽略后缀)的最大值。

0007

我很满意我可以在几个表上创建联合查询,以找到最佳答案:


select to_number(substr(oid,1,length(oid)-3)) from table1

union

select to_number(substr(oid,1,length(oid)-3)) from table2

union

select to_number(substr(oid,1,length(oid)-3)) from table3
order by 1 desc)
where rownum=1

但我不想添加每个命名表。相反,我想在任何具有列名 OID 的表中创建并集。

sql oracle oracle-sqldeveloper
1个回答
0
投票

您可以使用oracle cols table来实现您的要求。

select
case when row_number = max(row_number) over() then replace(query, 'union all', '')
else query end as query
from
(select distinct 'select ' || to_number(substr(oid,1,length(oid)-3)) || ' from ' || table_name || ' union all ' as query, rownum as row_number,  column_name, table_name 
from cols where upper(column_name) in ('ODI'))
order by row_number;
© www.soinside.com 2019 - 2024. All rights reserved.