2013-12-11 16 views
1

考慮有三個數據庫說D1, D2, D3。並且在每個數據庫中有兩個表T1, T2查找具體記錄可用的數據庫

T1有兩列C1, C2。表T2有三列C3, C4, C5

現在我們有六張表。每個數據庫中的記錄都不相同。

數據庫結構:

D1: 
------ 
T1 T2 


D2: 
------ 
T1 T2 


D3: 
------ 
T1 T2 

表strucutre:

T1: 
------ 
C1 C2 

T2: 
---------- 
C3 C4 C5 

我可以運行在每個數據庫中同一查詢,如下圖所示,得到的輸出,並找到該數據庫具有備案號:

Select * from T1 where C1 = 'Some_value' 

我的問題是,如何找到哪個數據庫有我想要的記錄,而無需運行查詢三次......?

注意:可以有N個數量爲M的數據庫。

+2

您已列出mysql,oracle和sql-server標記。但是,你使用'數據庫'這個術語,我不確定有關mysql,但我知道'數據庫'在oracle和sql-server之間意味着完全不同的事實。那麼,你真的*在這裏問什麼? –

+1

在哪個數據庫中?你標記了mysql,sqlserver和oracle? –

+1

好像你需要閱讀/瞭解數據庫分片。 – jeroenh

回答

3

您可以運行這樣的查詢(SQL Server的以下版本,其他DBS是相似的):

Select 'db1' as db, 'T1' as table from db1.dbo.T1 where 'Some_value' in (C1, C2) 
union all 
Select 'db1' as db, 'T2' as table from db1.dbo.T1 where 'Some_value' in (C3, C4, C5) 
union all 
Select 'db2' as db, 'T1' as table from db2.dbo.T1 where 'Some_value' in (C1, C2) 
union all 
Select 'db2' as db, 'T2' as table from db2.dbo.T1 where 'Some_value' in (C3, C4, C5) 
union all 
Select 'db3' as db, 'T1' as table from db3.dbo.T1 where 'Some_value' in (C1, C2) 
union all 
Select 'db3' as db, 'T2' as table from db3.dbo.T1 where 'Some_value' in (C3, C4, C5) 
+0

請參閱我的編輯。這可能適用於每個有兩個表的三個數據庫。如果100個數據庫各有300個表,會怎麼樣? –

+1

@GokulNath然後,您很可能會使用特定於給定平臺的動態SQL解決方案。 – RedFilter

+0

@GokulNath你在使用什麼平臺? –

1

嘗試在Oracle此查詢,您可以使用val作爲變量:

select Tab1.* from 
(Select 'D1' as DataBase,D1.T1.* from D1.T1 
UNION ALL 
Select 'D2' as DataBase,D2.T1.* from D2.T1 
UNION ALL 
Select 'D3' as DataBase,D3.T1.* from D3.T1) Tab1, 
(select 'Some_value' as val from dual)Tab2 
WHERE 
Tab1.C1 = Tab2.val; 
0

是的,你需要動態的Sql。 i)首先找出當時你有多少個數據庫。 然後在每個循環中通過該數據庫的所有表創建另一個循環,依此類推。

順便說一句,你想要做的第一件事是你會有N號。的數據庫和M號。在每個表中。