2011-12-14 60 views
0

我有一個表,其中包含與其他表對應的ID(鍵)列的很多列。 例如,我有出售MySQL:翻譯ID的值

[table of cars that were sold] 
(
    car_make_id 
, car_engine_id 
, car_model_id 
, car_radio_id 
, buyer_id 
, seller_id 
, car_tittle_id 
, sale_price 
) 

具有包含ID和名稱,如其他表ID字段中的每一個汽車的表:

[another table] 
(
    car_make_id 
, car_engine_id 
, car_model_id 
, car_radio_id 
, buyer_id 
, seller_id 
, car_tittle_id 
, sale_price 
) 

[and another table] 
(
    car_make 
, car_make_id 
) 

[and another table] 
(
    car_title 
, car_title_id 
) 

等......與每個表名爲car_lookup,car_model_lookup,...

有沒有辦法加入所有這些,而無需編寫一百萬個子查詢。這個表中有數百萬條記錄,而且每個額外的連接在時間上都很費錢。我正在尋找一種快速有效的方式,將這些數據與另一個沒有id的表進行比較,但只是名稱。可以說我有一個兼容收音機的列表(製造商,型號,引擎,收音機),我想要列出所有售賣不兼容收音機汽車的銷售商名單以及他們製造的不相容銷售額。

我一直在做這樣的東西在Perl中,但它可能需要幾小時才能運行。所以我正在尋找可以在mysql中完成的事情。

ps:汽車的東西只是一個例子,我實際上沒有用汽車工作,但它說明了我遇到的問題。由於大量已經查詢數據的代碼,我無法改變數據庫的設置方式。

感謝

+0

請張貼一些樣本數據和期望的輸出 – Bohemian 2011-12-14 22:55:30

回答

0

您需要告訴從每個ID名拉其表的數據庫的一些方式。

如果這種查詢太慢,也許你可以優化你的數據庫或MySQL服務器,以便能夠更快地填充這些JOIN語句。嘗試增加緩存大小(尤其是如果您的服務器有很多RAM)並確保您在這些查找表上有關鍵索引。

SELECT car_make, car_engine, car_model, car_radio, 
     buyer, seller, car_title, sale_price FROM cars_sold 
JOIN car_make_lookup USING (car_make_id) 
JOIN car_engine_lookup USING (car_engine_id) 
JOIN car_title_lookup USING (car_title_id) 
JOIN car_model_lookup USING (car_model_id) 
JOIN car_radio_lookup USING (car_radio_id) 
JOIN buyer_lookup USING (buyer_id) 
JOIN seller_lookup USING (seller_id) 
JOIN car_title_lookup USING (car_title_id)