2

テーブル構造は以下のとおりです。

Table1 (ID int, value1 int,...)

ID       Value1
----    --------
1        10
2        20
5        12


Table2 (ID int, value2 int,...)

ID       Value2
----    --------
1        13
3        24
4        11


Table3 (ID int, value3 int,...)
ID       Value3
----    --------
4        150
5        100

私の予想される出力は以下のとおりです。

ID       Value1        Value2        Value3
----    --------      --------      --------
1         10            13             NULL
2         20            NULL           NULL
3         NULL          24             NULL
4         NULL          11             150
5         12            NULL           100

上記のテーブルは巨大であり、最高のパフォーマンスを得たいことに注意してください。

私のクエリの提案は以下の通りです:

Select ID, 
       SUM(Value1) AS Value1, 
       SUM(Value2) AS Value2,
       SUM(Value3) AS Value3 
From (
    Select ID, Value1 , NULL as value2, NULL as value 3
    From Table1

    Union ALL

    Select ID, NULL , value2, NULL
    From Table2

    Union ALL

    Select ID, NULL, NULL, value 3
    From Table3
    )Z
Group By Z.ID
4

2 に答える 2

3

ID ごとに 1 つの値しかないと仮定すると、これでうまくいくはずです。

SELECT aux.ID, t1.Value1, t2.Value2, t3.Value3
FROM 
(SELECT ID FROM Table1
 UNION
 select ID FROM Table2
 UNION
 SELECT ID FROM Table3) aux
LEFT OUTER JOIN Table1 t1 ON aux.ID = t1.ID
LEFT OUTER JOIN Table2 t2 ON aux.ID = t2.ID
LEFT OUTER JOIN Table3 t3 ON aux.ID = t3.ID

複数の値がある場合:

SELECT aux.ID, SUM(t1.Value1) as 'Value1', SUM(t2.Value2) as 'Value2', SUM(t3.Value3) as 'Value3'
FROM 
(SELECT ID FROM Table1
 UNION
 select ID FROM Table2
 UNION
 SELECT ID FROM Table3) aux
LEFT OUTER JOIN Table1 t1 ON aux.ID = t1.ID
LEFT OUTER JOIN Table2 t2 ON aux.ID = t2.ID
LEFT OUTER JOIN Table3 t3 ON aux.ID = t3.ID
GROUP BY aux.ID
于 2012-06-11T10:45:49.450 に答える
0

私は最初にaFと同じ答えを書きました。上で行いました。したがって、それを削除し、別のアプローチを使用しました。

ここ、

  • 最初のクエリは table1 からすべてを取得します
  • 2番目のクエリは、table2スキップからすべてを取得します
  • table1 に既に存在するもの 3 番目のクエリは、上記の 2 つのクエリをスキップして、残りのすべてを取得します。
  SELECT T1.ID, T1.VALUE1, T2.VALUE2, T3.VALUE3 --all T1
  FROM TABLE1 T1
      LEFT JOIN TABLE2 ON T1.ID=T2.ID
      LEFT JOIN TABLE3 ON T1.ID=T3.ID
UNION
  SELECT T2.ID, T1.VALUE1, T2.VALUE2, T3.VALUE3 --all T2 where T1 is NULL
  FROM TABLE1 T2
      LEFT JOIN TABLE1 ON T2.ID=T1.ID
      LEFT JOIN TABLE3 ON T2.ID=T3.ID
  WHERE T1.ID IS NULL
UNION
  SELECT T3.ID, T1.VALUE1, T2.VALUE2, T3.VALUE3 --all T3 where T1 is NULL AND T2 IS NUL
  FROM TABLE1 T3
      LEFT JOIN TABLE1 ON T3.ID=T1.ID
      LEFT JOIN TABLE2 ON T3.ID=T2.ID
  WHERE T1.ID IS NULL
        AND T2.ID IS NULL
于 2012-06-11T11:02:10.330 に答える