2014-09-24 3 views
0

У меня есть база данных MySql, с таблицей, содержащей столбцы:MySQL автообъединение запроса наряду с отображением таблицей

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

Теперь параметр может иметь разные значения 2 - шаги & расстояния.

У меня есть еще одна таблица сопоставления_2, которая отображает шаги от table_1 до соответствующего расстояния в таблице_1.

Так table_2 просто хранит два идентификаторы table_1 и его схема является

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

+0

Я изменил LEFT JOIN, чтобы просто «присоединиться» (equi join i предположим) и устранил нулевые значения – comeOnGetIt

+0

@comeOnGetIt было бы хорошо использовать JOIN вместо LEFT JOIN, левое объединение вернет нулевые значения, потому что, например, 'table_2. table_1_steps_id = 4', но у вас нет коррелированного значения в таблице_1 с 'id = 4, parameter = 'steps'', поэтому соединение не будет выполнено. Вы уверены, что хотите пропустить эти строки? Возможно, вам придется исследовать, почему вам не хватает этих значений. – fthiella

Смежные вопросы