1

返される2つの選択があります:

SELECT_A (COLUMN_A,COLUMN_B, SELECT_A_JOIN_COLUMN)

SELECT_B (COLUMN_A,COLUMN_B, SELECT_B_JOIN_COLUMN)

望ましい結果:

Result  (COLUMN_A,COLUMN_B,SELECT_A_JOIN_COLUMN,SELECT_B_JOIN_COLUMN)

例:

SELECT_A結果:

A B zxc
A B rty

SELECT_B結果:

A B yui
A B hjk

望ましい結果:

A B zxc null
A B rty null
A B null yui
A B null hjk

これを達成する方法は?

ユニオンに近いですが、これをジョインで行うことはできますか?

編集

Ok。それでは、私の目標を述べさせてください。階層ツリーを返すクエリを作成したい。これは、LINQ2Entities が、ナビゲーション プロパティに多くのインクルードがあるクエリに対して、非常に遅く非効率的な sql を生成しているためです。

だから私が最初に達成したいのは、ツリーを取得することです...どういうわけか。

例:

私は次のように結果を達成したい:

ObjectId | ChildType1Id | ChildType1Field | ChildType2Id | ChildType2Field

    1          34          asd          null        null
    1          12          xcv          null        null
    1          5           klk          null        null
    1          null        null         6           vbn
    1          null        null         7           jkh

私はこれまでのところ、私を返す左結合を持つ2つの単純な選択を取得しました:

ObjectId  | ChildType1Id | ChildType1Field
    1          34             asd
    1          12             zcv
    1          5              klk

ObjectId  | ChildType2Id | ChildType2Field
   1             6           vbn 
   1             7           jkh

子の種類が増えるとどうなりますか? childType ごとに、ユニオンを使用する必要があるようです。50 列ある場合は、それらすべての列を UNION で指定する必要があります (同じ数の列が必要なため)。必要な列 (次の childrentype 列) を追加するためだけに join のようなものでこれらすべてのユニオンを作成することを避けることはできますか?

3 つの異なる childrenTypes の望ましい結果:

ObjectId|ChildType1Id|ChildType1Field|ChildType2Id|ChildType2Field|ChildType3Id|ChildType3Field

    1          34          asd          null        null       null         null 
    1          12          xcv          null        null       null         null
    1          5           klk          null        null       null         null
    1          null        null         6           vbn        null         null
    1          null        null         7           jkh        null         null
    1          null        null         null        null        5           iop
    1          null        null         null        null        9           klp

どんな助けでも感謝します。

4

4 に答える 4

5

としてそれを行うことは、 (SQL FiddleJOINよりも複雑ですUNION

SELECT COALESCE(A.COLUMN_A, B.COLUMN_A) AS COLUMN_A,
       COALESCE(A.COLUMN_B, B.COLUMN_B) AS COLUMN_B,
       SELECT_A_JOIN_COLUMN,
       SELECT_B_JOIN_COLUMN
FROM   SELECT_A A
       FULL OUTER JOIN SELECT_B B
         ON SELECT_A_JOIN_COLUMN = SELECT_B_JOIN_COLUMN 
于 2012-09-21T19:03:05.143 に答える
1

ユニオンです。

SELECT COLUMN_A, COLUMN_B, SELECT_A_JOIN_COLUMN, NULL
    FROM SELECT_A
UNION ALL
SELECT COLUMN_A, COLUMN_B, NULL, SELECT_B_JOIN_COLUMN
    FROM SELECT_B;
于 2012-09-21T18:57:48.227 に答える
0
select COLUMN_A, COLUMN_B, SELECT_A_JOIN_COLUMN, null
from SELECT_A
union all
select COLUMN_A, COLUMN_B, null, SELECT_B_JOIN_COLUMN
from SELECT_B
于 2012-09-21T18:57:13.873 に答える
0

あなたが望むものがどのように参加するのかわかりません。この組合はこれを行います:

select *
from ((select COLUMN_A,COLUMN_B, SELECT_A_JOIN_COLUMN, NULL as SELECT_B_JOIN_COLUMN
       from SELECT_A
      ) union all
      (select COLUMN_A,COLUMN_B, NULL as SELECT_A_JOIN_COLUMN, SELECT_B_JOIN_COLUMN
       from SELECT_B
      )
     ) t
order by 1, 2, 3, 4
于 2012-09-21T18:58:49.897 に答える