2014-09-24 45 views
0

沿着我有MySQL數據庫與含有列的表格:MySQL的自聯接查詢與映射表

table_1 { 
    id (int), 
    parameter (varchar), 
    value (double) 
} 

現在參數可以具有2個不同的值 - 步驟&距離。

我還有一個映射table_2,它將table_1中的步驟映射到table_1中的相應距離。

所以TABLE_2只是存儲TABLE_1的兩個ID和它的模式是

table_2 { 
    table_1_steps_id (int), 
    table_1_distance_id(int) 
} 

會是怎樣的查詢得到一個結果的步驟和相應的距離?

回答

1

一個快速的方式來獲得的步驟和距離將是這樣的:

SELECT 
    ts.value as steps, 
    td.value as distance 
FROM 
    table_2 LEFT JOIN table_1 ts 
    ON table_2.table_1_steps_id = ts.id AND ts.parameter='steps' 
    LEFT JOIN table_1 td 
    ON table_2.table_1_distance_id = td.id AND td.parameter='distance' 
+0

謝謝,我嘗試過,但它給空值的長長的名單,並導致在最後,我怎樣才能消除這些空? – comeOnGetIt 2014-09-24 20:34:51

+0

我將LEFT JOIN改爲「join」(equi join i suppose)並消除空值 – comeOnGetIt 2014-09-24 20:39:11

+0

@comeOnGetIt使用JOIN而不是LEFT JOIN可以很好,左連接將返回空值,因爲例如'table_2。 table_1_steps_id = 4',但是你在table_1中沒有相關值,id = 4,參數='steps',所以連接不會成功。你確定要跳過這些行嗎?你可能需要調查爲什麼你缺少這些值 – fthiella 2014-09-24 20:42:25