2017-08-25 27 views
0

我有SQL的初學者知識,我想知道這是否可能在SQL中。循環的SQL連接?

SQL查詢1 >>

select distinct(id) as active_pod from schema_naming 

查詢1個輸出>>

active_pod 
DB_1 
DB_2 
... 
DB_20 

SQL查詢2 >>

select * from DB_1.mapping UNION 
select * from DB_2.mapping UNION 
.... 
select * from DB_20.mapping UNION 

由於我的SQL有限的知識,我m目前首先運行#1查詢,並且每次更改查詢2中的DB_1,DB2,.. DB_20並運行#2。

但是,我想知道是否有辦法在一個查詢中這樣做,所以我不必在#2查詢中手動更改DB號碼,也不必每行都聯合。

是這樣的。(但不知道該怎麼與工會辦)

select * from { 
select distinct id from schema_naming}.user_map 

這將是巨大的,如果有人能在這個線索。 (我試圖在Oracle SQL上這樣做)

謝謝你提前。

+0

請標記oracle – maSTAShuFu

+0

你想實現什麼? – maSTAShuFu

+1

爲什麼跨數據庫有這麼多的映射表?這似乎更像是一個設計不好的問題 – Phil

回答

0

這絕對是一個黑客,但它可能會讓你的生活更輕鬆,直到提出更好的解決方案。基本上使用查詢來生成第二個查詢,只需要手動編輯即可刪除最後一行中的不必要的UNION

SELECT 'SELECT * FROM ' || ACTIVE_POD || '.MAPPING UNION' AS QUERY 
FROM SCHEMA_NAMING 

結果:

SELECT * FROM DB_1.MAPPING UNION 
SELECT * FROM DB_2.MAPPING UNION 
SELECT * FROM DB_3.MAPPING UNION 
SELECT * FROM DB_4.MAPPING UNION 
SELECT * FROM DB_5.MAPPING UNION 
SELECT * FROM DB_6.MAPPING UNION 
SELECT * FROM DB_7.MAPPING UNION 
SELECT * FROM DB_8.MAPPING UNION 
SELECT * FROM DB_9.MAPPING UNION 
SELECT * FROM DB_10.MAPPING UNION 
SELECT * FROM DB_11.MAPPING UNION 
SELECT * FROM DB_12.MAPPING UNION 
SELECT * FROM DB_13.MAPPING UNION 
SELECT * FROM DB_14.MAPPING UNION 
SELECT * FROM DB_15.MAPPING UNION 
SELECT * FROM DB_16.MAPPING UNION 
SELECT * FROM DB_17.MAPPING UNION 
SELECT * FROM DB_18.MAPPING UNION 
SELECT * FROM DB_19.MAPPING UNION 
SELECT * FROM DB_20.MAPPING UNION 
2

你試圖讓這樣的事情?

SELECT 'SELECT * FROM ' || active_pod || '.' || 'Mapping UNION' 
FROM 
(
select distinct(id) as active_pod from schema_naming 
) as DT; 
+1

實際上,我正在尋找一個將返回整個聯合輸出的簡單查詢。我開始認爲這隻能用動態查詢完成,但上面的連接技巧非常好知道!謝謝! – user1486507

0

另外,使用PL/SQL塊:

BEGIN 
For i in (SELECT 'SELECT * FROM ' || ACTIVE_POD || '.MAPPING UNION' AS QUERY 
FROM SCHEMA_NAMING) loop 
dbms_output.put_line(i.query); 
end loop; 
END 

您的查詢就會出現在你的IDE輸出窗口。