2017-08-08 81 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