Внутреннее соединение Mysql с условием ИЛИ?

У меня есть 2 таблицы, как показано ниже

местоположение _расстояние

----------------------------------------------
id   | fromLocid    | toLocid   |  distance
----------------------------------------------
1    |  3           |  5        |   70
2    |  6           |  8        |   15
3    |  2           |  4        |   63
...

прочее _стол

--------------------------------------------
Id  | fromLocid   | toLocid    | otherdata
--------------------------------------------
12  |  5          | 3          | xxxx
22  |  2          | 4          | xxxx   
56  |  8          | 6          | xxxx
78  |  3          | 5          | xxxx

Я хотел бы получить расстояние ч / б местоположения в другой таблице _для каждой строки. Вот что я пробовал

SELECT ot.*, ld.distance FROM other_table AS ot 
    INNER JOIN location_distance ld ON ld.fromLocid = ot.fromLocid AND ld.toLocid = ot.toLocid

Это не возвращает строки, если значения местоположения наоборот. Как я могу переписать приведенный выше запрос для получения ожидаемого результата? Должен ли я включать условие ИЛИ в предложение соединения? как ниже?

SELECT ot.*, ld.distance FROM other_table AS ot 
    INNER JOIN location_distance ld ON (ld.fromLocid = ot.fromLocid OR ld.fromLocid = ot.toLocid) AND (ld.toLocid = ot.fromLocid OR ld.toLocid = ot.fromLocid)

но этот запрос «Объяснить» говорит: «Диапазон проверен для каждой записи»... это плохая практика?

Результат

--------------------------------------------------------
Id  | fromLocid | toLocid    | otherdata   | distance
--------------------------------------------------------
22  |  2        |   4        | xxxx        | 63
78  |  3        |   5        | xxxx        | 70

Ожидаемый результат должен быть

-----------------------------------------------------
Id  | fromLocid   | toLocid   | otherdata  | distance
-----------------------------------------------------
12  |   5         |    3      | xxxx       | 70
22  |   2         |    4      | xxxx       | 63
56  |   8         |    6      | xxxx       | 15 
78  |   3         |    5      | xxxx       | 70
11
задан michelle.ann.diaz 12 February 2013 в 02:14
поделиться