これは少し複雑ですが、私は2つのテーブルを持っています。 > Table2.PhoneNumber、またはTable1.PhoneNumber2 - - > Table2.PhoneNumber表はTable1.PhoneNumber1に基づいて結合することができる同じテーブルに2回参加する最善の方法は何ですか?
*Table1*
ID
PhoneNumber1
PhoneNumber2
*Table2*
PhoneNumber
SomeOtherField
:の構造は、このようなものであるとしましょう。
ここで、PhoneNumber1、PhoneNumber2に対応するSomeOtherField、PhoneNumber2に対応するSomeOtherFieldを含む結果セットを取得します。
私はこれを行う2つの方法を考えました - テーブルに2回参加するか、ON句でORと一度参加するかのどちらかです。
方法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
これは動作するようです。私はまだ仕事にこれをもらっていないと私はあるかどうかわからない
SELECT ...
FROM Table1
INNER JOIN Table2
ON Table1.PhoneNumber1 = Table2.PhoneNumber OR
Table1.PhoneNumber2 = Table2.PhoneNumber
- 何とかビットのこのようなクエリを持つように
:
方法2それを行う方法。
これを達成する最も良い方法は何ですか?どちらの方法も単純で直感的ではないようです...これを行うもっと簡単な方法はありますか?この要件は一般にどのように実装されていますか?
私はちょうど私自身の問題のために、このソリューションを使用しましたのMicrosoft Access SQLで動作します。それは多くの助けとなりました。しかし、これを見る前に、互いに結合する必要のあるテーブルを見ることができるところで、私は主キーと外部キーを適用しました。なぜこれは悪い考えですか? –
@volumeone - あなたは私の答えの最後の部分を誤解しているかもしれないと思います。プライマリキーと外部キー**は**良い考えです。それらを避けることは、貧しい習慣であり、悪い設計であり、ひどい悪いことです。 –
完璧ですが、なぜこのような状況でエイリアスが必要なのでしょうか? –