2016-09-24 73 views
1

爲了解釋我的問題可以說我正在建設汽車。在我的數據庫中,一輛汽車是由零件(發動機,底盤,車輪)製成的。每個零件都有一個物理位置(來自表格位置的part_location),它通過(part_location = location_id)進行鏈接。SQL LEFT JOIN多個表,包括鏈接到每個連接1表

在我的情況下,將只有各部分的1,每個部分都是唯一的

在我查詢我想組裝我的車的查詢,包括每個組成部分的城市和國家(不是ID)

我查詢的開頭:

SELECT car_name, car_type, engine_name, engine_type, chassis_name, chassis_type, wheel_name, wheel_type 
FROM cars 
LEFT JOIN engines ON car_id = engine_car_id 
LEFT JOIN chassis ON car_id = chassis_car_id 
LEFT JOIN wheels ON car_id = wheel_car_id 

我怎麼能包括每個部分(如car_city的位置,car_country;每個零件從location_city別名,location_country)?

我的表設置如下:

Table cars 
    car_id 
    car_name 
    car_type 

Table engines (same for chassis, wheels) 
    engine_id 
    engine_name 
    engine_type 
    engine_car_id 
    engine_location_id 

Table locations 
    location_id 
    location_city 
    location_country 
+0

提供您的兩個表的結構 –

+0

我現在在我原來的帖子中已經這樣做 – Jelmer

+0

發佈了您的數據以及您的結果應如何看起來像 –

回答

0

我覺得您的查詢背後的想法是正確的。你應該把它與明確的別名寫的,所以我希望這樣的事情:

SELECT c.car_name, c.car_type, e.engine_name, e.engine_type, 
     ch.chassis_name, ch.chassis_type, 
     w.wheel_name, w.wheel_type, 
     el.city as engine_city 
FROM cars c LEFT JOIN 
    engines e 
    ON e.car_id = c.engine_id LEFT JOIN 
    chassis ch 
    ON ch.car_id = c.chassis_id LEFT JOIN 
    wheels w 
    ON w.wheel_car_id = c.car_id LEFT JOIN 
    locations el 
    ON el.location_id = e.location_id 

然而,如果沒有表格佈局或樣本數據,這只是一個猜測。

+0

查詢我顯示按預期工作。我把所有的獨立部分分成1輛。我只是無法弄清楚如何正確添加位置信息。我編輯了我的原始帖子,表結構 – Jelmer

+0

@Jelmer。 。 。首先,你原來的查詢不會正常工作,但你在我回答後編輯它。其次,我只是修改了答案,以顯示如何放置引擎位置信息。您可以爲要放置位置的每個元素添加一個附加聯接。 –

+0

得到它的工作,謝謝! – Jelmer