1
私は、複数のテーブルで結合がどのように機能するか誤解を招くことがあります。 3つのテーブルA、B、Cがあり、それらに参加する必要があるとします。ここで複数のテーブルの内部結合
はここでV1
SELECT A.NAME AS name1
,B.NAME AS name2
,C.NAME AS name3
FROM A
INNER JOIN B
ON A.id = B.id
INNER JOIN C
ON B.id = C.id
あるV2
SELECT A.NAME AS name1
,D.NAME AS name2
,D.NAME AS name3
FROM A
INNER JOIN (
SELECT B.NAME AS name2
,C.NAME AS name3
FROM B
INNER JOIN C
ON B.id = C.id
) AS D
ON A.id = D.id
は、2つのバージョンのいずれかのパフォーマンスの違いはありますか? 最初のクエリがより洗練されているように見えますが、クエリビルダUIを構築する必要があります。
もう1つは、内側のクエリで 'Id'を選択していないので、2番目のクエリは失敗します。しかし、もっと重要なのは、これらは同じクエリではないということです。最初のものでは、 'A'を' B'に、 'A'を' C'に関連づけています。第2の場合、あなたは 'B'を' C'に関連づけています。これは最初のクエリで定義された関係ではありませんでした。それだけでなく、第2のバージョンははるかに読みにくく/理解することが困難です。あなたは最初のバージョンに固執すべきです - それはよりクリーンで理解しやすいです。 – Siyual
@Siyual - 2つのジョインで暗黙的にBからCへの関係はありません - JOIN B ONではありませんA.id = B.id JOIN C ON A.id = C.idはJOIN B ONと同じ結果を返しますA.ID = B.id JOIN C ON B.id = C.id – PaulF
@PaulFこのシナリオでB対Cの関係が存在すると推測する唯一の方法は、IDのフィールドでテーブルを結合する場合です3つすべて(これは彼の例とまったく同じですが、ダミーコードのように見えますが、彼が実際に使っているものではありません)。 *しかし*、私は非常にあなたがそれぞれの主キーが同じである3つのテーブルを介して結合を行う必要があることを疑う。そうであれば、BからCへの関係を推論することができます。しかしそうでなければ、あなたはその接続をすることはできません。 – Siyual