0

私は2つのテーブルを一緒に結合したままにしています。

SELECT Col3, tab1.Col1, tab1.Col2 FROM
    (SELECT Col1,Col2 
    FROM Table1
    GROUP BY Col1,Col2) tab1
LEFT JOIN
    (SELECT Col3, Col1, Col2
    FROM Table2
    GROUP BY Col3, Col1, Col2) tab2
ON tab2.Col2 = tab1.Col2 AND tab2.Col1 = tab1.Col1

現時点では、Table2に存在しないTable1の行について、Col3がNullである行を返します。私はCol3に基づいてデータをグループ化しているので、NullではなくCol3の値を何らかの方法で取得できればよいでしょう。

これは可能ですか?

したがって、col3の値ごとに、col1とcol2の可能なすべての組み合わせを返そうとしています。問題は、col3にcol1、col2の特定の組み合わせが含まれていない場合、col3に対してnullが発生することです。

4

3 に答える 3

1

Col3 が何らかのカテゴリであり、categoryテーブルの主キーであると仮定すると、次のようにすることができます。

select Category.Col3,
       tab1.Col1,
       tab1.Col2,
       sum (tab2.YourAggregate) SumOfSomething
 -- Take all categories
  from Category
 -- Cartesian product with Tabl1
 cross join Table1 tab1
 -- Find matching records in Table2, if they exist
  left join Table2 tab2
    on Category.Col3 = Tab2.Col3
   and Tab1.Col1 = Tab2.Col1
   and Tab1.Col2 = Tab2.Col2
 group by Category.Col3,
       tab1.Col1,
       tab1.Col2

クロス結合は、関係するテーブルのデカルト積を生成し、Table2 には見つからない可能性がある Col3 を取得します。

于 2012-06-01T11:29:04.453 に答える
0

LEFT JOIN は、左側のテーブルで Col1 と Col2 の一致が見つからなかった右側のテーブルで null を生成します。これは予期される動作です。

別のクエリを作成するのに助けが必要な場合は、データ構造といくつかのサンプル データを投稿して操作する必要があります。

于 2012-06-01T11:11:00.233 に答える
0

テーブルを切り替えるだけです(または右結合を使用してください):

SELECT tab2.Col3, tab2.Col1, tab2.Col2 FROM
  (SELECT distinct Col3, Col1, Col2 FROM Table2) tab2
LEFT JOIN
  (SELECT distinct Col1,Col2  FROM Table1) tab1
ON tab2.Col2 = tab1.Col2 AND tab2.Col1 = tab1.Col1
于 2012-06-01T11:12:47.637 に答える