2012-06-11 38 views
2

我現在有存儲在一個主數據庫和該數據庫中的表有類似下面如何加入數據庫和表,其中數據庫名是從當前表中的字段派生的?

companies.companyInfo

ID | Name  | databaseName | otherinfo 
---+----------+--------------+---------- 
0 | companyA | databaseA | Extra1 
1 | companyB | databaseB | Extra2 

結構和公司數據庫是如下

數據庫服務器

databaseA.users

userID | Name | Password | extra 
-------+---------+-----------+--------- 
0  | user1 | pass1  | other1 
1  | user2 | pass2  | other2 

和databaseB是類似的。

我想要做的是從用戶表的一個獲取用戶信息,而是從主數據庫

所以我想要做鏈接是某種子選擇讓所有用戶的詳細信息,但飼料將數據庫名稱放入來自companies.companyInfo表查詢的子查詢中。

我卡住了..請幫忙!

回答

2

這並不完全清楚你在做什麼,但原則上不能使用表達式(包括表查找中的字段值)作爲標識符(例如表或列的名稱)。

一種解決方法是從包含所需查詢的字符串'準備'語句;這樣的字符串可以通過連接到它標識的地方表達式來構建:

SELECT CONCAT(
    'SELECT * FROM `', REPLACE(databaseName, '`', '``'), '`.users' 
) INTO @qry FROM companies.companyInfo WHERE ID = 1; 

PREPARE stmt FROM @qry; 
EXECUTE stmt; 

然而,這可能是一樣容易使用一個SELECT查詢您的應用程序,以獲取數據庫的名稱,然後執行相同的串聯來從那裏發出第二個查詢。

所有這一切說,也許你的數據結構需要進一步正常化?爲什麼不將所有數據庫合併爲一個,每個表中的列都指明每個記錄與哪個公司相關?

相關問題