0

クエリで複数のテーブルを結合するシステムを実行しています。ほとんどの場合、次の種類のクエリでうまくいきます。

     SELECT * FROM A JOIN B ON A.a = B.a JOIN C ON C.a = A.a WHERE A.a = 123;  

属性 Aa は PK であり、Ba および Ca で FK として使用されます

場合によっては、対応する Ba と Ca がない場合もあります。Ca だけが欠落している場合もあります。現在のように、B または CI に対応するキーがない場合は空のセットを取得します。予想通り。

A だけが存在する場合は A のみの属性を持つセットを生成し、Aa = Ba などの場合は B と C の属性を追加するクエリで便利です。

これには、一般的な SQL ではなく、DBMS 固有のソリューションが必要だと思いますが、よくわかりません。

可能であれば、これをどのように行うべきか考えていますか?

4

2 に答える 2

1

この種の結合は、outerと呼ばれます (デフォルトの種類の結合はinnerと呼ばれます)。

外部結合が必要であることを SQL に伝える方法は次のとおりです。

SELECT * FROM A
LEFT OUTER JOIN B ON A.a = B.a
LEFT OUTER JOIN C ON C.a = A.a WHERE A.a = 123;  

Bこれにより、対応するor C(または両方) の行が欠落している場合でも、使用可能な行が必要であることを SQL に伝えます。

于 2012-12-17T21:35:53.633 に答える
1

あなたはこれを求めている:

SELECT *
FROM A LEFT OUTER JOIN
     B
     ON A.a = B.a LEFT OUTER JOIN
     C
    ON C.a = A.a
WHERE A.a = 123

left outer join、すべてのレコードを最初のテーブル (「左側」のテーブル) と右側の一致するテーブルに保持します。任意のテーブルの列を参照できます。一致しない場合、値は NULL です。

于 2012-12-17T21:35:41.800 に答える