2017-08-08 75 views
1

在我的新的业务工作,我遇到了在那里的表进行编号一样的Oracle SQL - 使用中的“与as'语句和许多表

table_1, 
table_2, 
table_3, 
... 

(最多20个)的数据库结构

“UNION ALL”

所有这些表具有相同的结构,如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”语句中创建一个循环。

谢谢。

+0

如果您需要经常这样做,会不会创建视图帮助? –

+0

*经常更新x的物化视图。 – xQbert

+0

表名是否相似?或者我们如何捕获你的表名来在循环/函数中调用它们? –

回答

2

简答:不,你必须像你一样使用UNION语句。

长答案:我不确定你的公司有20个相同结构的表格,但我怀疑设计很差,你应该看看改进他们的数据库布局。

您可以编写一个脚本,以编程方式将所有脚本联合起来,但是花费的工作量将超过编写脚本所需的工作量。

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

+0

不幸的是,这是一个糟糕的设计。 – Craiten