2010-10-18 25 views
1

我想從MySQL數據庫中選擇一些數據。MySQL使用子查詢來獲取表名?

我有一張包含業務詳情的表格,以及一張包含交易列表的單獨表格。當我們有多個交易

business_details

id | business_name | trade_id | package_id 
1 | Happy News | 12 | 1 

這是主表,包含了企業名稱,商標標識和包裝標識

shop_trades

id | trade 
1 | newsagents 

這包含業務的貿易類型

configuration_packages

id | name_of_trade_table 
1 | shop_trades 
2 | leisure_trades 

這包含在

尋找交易的表的名稱,因此,基本上,如果我想找到的商品類型(例如,報攤,快餐等)我看看XXXX_trades表。但我首先需要從configuration_packages表中查找XXXX的名稱。

我通常會做的是2個SQL查詢:

SELECT business_details.*, configuration_packages.name_of_trade_table 
FROM business_details, configuration_packages 
WHERE business_details.package_id = configuration_packages.id 
AND business_details.id = '1' 

這給了我的數據庫表中查找商品名稱的名字,所以我擡頭看錶的名稱

SELECT trade FROM XXXX WHERE id='YYYY' 

其中XXXX是作爲第一個查詢的一部分返回的表的名稱,而YYYY是包的id,再次從第一個查詢返回。

有沒有辦法結合這兩個查詢,以便我只運行一個?

我以前使用子查詢,但只在查詢的SELECT側 - 而不是FROM側。

+0

爲什麼你有兩個獨立的餐桌'shop_trades'和'leisure_trades'?而不是一個「交易」? – 2010-10-18 15:07:08

+0

謝謝。有效的問題,但這兩個'包'存儲不同的費率。它們不相同。 – Sjwdavies 2010-10-18 15:13:40

+0

我不認爲你想要做什麼是可能的。我認爲對你而言,唯一的兩個選擇就是繼續進行,或者試着製作適用於這兩個行業的更通用的數據庫結構。 – 2010-10-18 15:17:46

回答

2

這不可能,這聽起來像是你的模型存在問題。

爲什麼不把shop_tradesleisure_traces放在同一張表中,並且兩列之間有一列不同?

+0

謝謝,但它是與保險有關的,例如,商店的每筆交易比休閒有更多的費率... – Sjwdavies 2010-10-18 15:09:47

+0

例如,一家商店將有一個'目標股票'利率,即賓館不會 – Sjwdavies 2010-10-18 15:10:14

+0

真正的標準化狀態你應該避免存儲空值,這就是爲什麼我從這個角度接近它 – Sjwdavies 2010-10-18 15:10:41

2

通常,這是由單個查詢中的聯合處理的。

規範化可以讓您轉換爲邏輯模型。這有助於更好地理解數據。實施模型時非常規化是很常見的。您在這裏的子類通常以兩種方式實現:

  • 如您所示分開表格,這使檢索變得困難。這會導致您關於如何檢索數據的問題。
  • 具有子類型指示符的所有子類型的公用表。這可能會導致某些子類型的列始終爲空。它簡化了數據訪問,並可能改變子代碼在代碼中的處理方式。

如果子類型的額外列相對較少訪問,那麼您可以使用混合實現,其中公共列位於類型表中,並且部分或全部子類型列位於子類型表中。編碼更復雜。

0

如果這是可能的,試試這個

SELECT trade 
FROM (SELECT 'TABLE_NAME' FROM 'INFORMATION_SCHEMA'.'TABLES' 
     WHERE 'TABLE_SCHEMA'='*schema name*') 
WHERE id='YYYY' 

UPDATE:

我想我有上面的代碼是不可能的。 :|

+2

請注意,如果您意識到錯誤,您可以隨時刪除您的答案。 – 2011-06-29 18:34:43