Как лучше всего дважды присоединиться к одной таблице?

Это немного сложно, но у меня есть 2 таблицы. Скажем, структура выглядит примерно так:

*Table1*
ID
PhoneNumber1
PhoneNumber2

*Table2*
PhoneNumber
SomeOtherField

Таблицы можно объединить на основе Table1.PhoneNumber1 -> Table2.PhoneNumber или Table1.PhoneNumber2 -> Table2.PhoneNumber.

Теперь я хочу получить набор результатов, который содержит PhoneNumber1, SomeOtherField, который соответствует PhoneNumber1, PhoneNumber2, и SomeOtherField, который соответствует PhoneNumber2.

Я придумал два способа сделать это - либо дважды присоединяясь к таблице, либо объединяя один раз с помощью оператора OR в предложении ON.

Метод 1 :

SELECT t1.PhoneNumber1, t1.PhoneNumber2, 
   t2.SomeOtherFieldForPhone1, t3.someOtherFieldForPhone2
FROM Table1 t1
INNER JOIN Table2 t2
   ON t2.PhoneNumber = t1.PhoneNumber1
INNER JOIN Table2 t3
   ON t3.PhoneNumber = t1.PhoneNumber2

Кажется, работает.

Метод 2 :

Чтобы каким-то образом получить запрос, который выглядит примерно так -

SELECT ...
FROM Table1
INNER JOIN Table2 
   ON Table1.PhoneNumber1 = Table2.PhoneNumber OR
      Table1.PhoneNumber2 = Table2.PhoneNumber

Я не получил этого пока работать, и я не уверен, есть ли способ сделать это.

Что? лучший способ добиться этого? Ни один из способов не кажется простым или интуитивно понятным ... Есть ли более простой способ сделать это? Как это требование обычно реализуется?

99
задан froadie 24 November 2010 в 15:11
поделиться