Oracle SQL - 在"with as"语句和许多表中使用 'union all'



在我的新业务工作中,我遇到了一个数据库结构,其中表格的编号如下

table_1, 
table_2, 
table_3, 
... 

(最多 20 个(

所有这些表都具有相同的结构,如 Id、Name、Surname。 现在我收到一个请求,要求在所有表中显示名称为"John"的 Id。 我在需要选择的表数量上苦苦挣扎,并提出了这个很长的查询:

With query_name (Id, Name, Surname) AS (
Select ID, Name, Surname FROM table_1
UNION ALL
Select ID, Name, Surname FROM table_2
UNION ALL 
Select ID, Name, Surname FROM table_3
UNION ALL
--...
--all the other tables
) SELECT * FROM query_name WHERE Name = "John"

有没有办法缩小我的查询,或者有没有其他解决方案来解决这个问题?我想到了一个循环,但我无法在"with as"语句中创建一个循环。

谢谢。

简短回答:不,您必须像以前一样使用 UNION 语句。

长答案:我不确定贵公司有 20 个结构相同的表是为了什么,但我怀疑设计很差,您应该真正考虑改进他们的数据库布局。

您可以编写一个脚本,以编程方式将它们全部统一起来,但工作量很可能超过硬编码所需的工作量。

如果需要频繁使用此结果集或使用此结果集或包含多个查询,请考虑基于该结果集创建视图,然后从中进行选择。

最新更新