2012-07-13 65 views
0

我有一個兩個表TabA和TabB。 TabA位於'DBX'_B中的DB_A和TabB中。這可能嗎?從表列值使用databaname Mysql查詢

現在我需要從DBA的TabA的字段中獲取DBX_B名稱,並將它們連接到查詢中以從這兩個表中提取數據。

DBA.TabA: 
ID  DB_Name  UserName Password 
------------------------------------------- 
101  DBX   xyz   abc 


DBX_B.TabB: 

ID  Type  FirstName  LastName 
------------------------------------------- 
101  Admin  xyz   abc 

我需要從DBA.TabAID, Username, PasswordDBX_B.TabBType, Firstname, LastName。但是第二個數據庫名稱可以從DB_NAME標識出來並用字符串連接,如_B'. So the 2nd database to pull from is DBA.TabA.DB_Name'+ _B。 在兩個ID上加入這兩個表。

查詢可以是這個樣子:

SELECT DBA.TabA.ID, DBA.TabA.Username, DBA.TabA.Password, 
     DB2.TabB.Type, DB2.TabB.FirstName, DB2.TabB.Lastname 
    FROM DBA, CONCAT(DBA.TabA.DB_Name, '_B') as DB2 
    WHERE DBA.TabA.ID = DB2.TabB.ID 

當然,我們可以用加入過多,而不是在那裏。

是這樣的可能嗎?想法?

+0

我對此表示懷疑。這實際上不是關係數據庫設計的目的...... – 2012-07-13 17:04:23

+0

除了數據庫名稱來自表值之外,它看起來像是一個直接的查詢。 :-) – 2012-07-13 17:24:50

+0

準確!..... – 2012-07-13 17:27:04

回答

0

你可以用一些subSelects來做到這一點,但是性能會受到很大的影響,直到它不值得。你可能會更好地把你的桌子變成你的中間層(php?),並將數據連接在一起。你如何做到這一點將取決於你的中間層是什麼。

如果你還處於設計階段,如果你還在設計階段,STOP和重新設計,如果你必須僱用某人,現在正確地設計你的數據模型將會爲你節省很多未來的痛苦。如果你保持着某種東西並堅持你所擁有的東西,那麼使用中間層將是你最好的選擇。

0

由於Oli說你不能在mysql和大多數關係數據庫程序中執行此操作,所以必須運行use命令來指示RDBMS使用數據庫,因爲它可能會存儲許多不同的數據庫。

例如,當你登錄到MySQL的,你必須運行:

use DB_NAME; 

指導它使用特定的數據庫那麼只有你可以訪問它的表。

+0

不需要這樣做。 – 2012-07-13 17:52:53