-2

この 2 つのテーブルを結合したいと考えています。

行の値と一致する場合、新しい行を挿入して列カウントの値を更新したい

表 1 はターゲット、表 2 はソースです。

表1

c1   c2   c3   c4   c5    number
 1    2    3    4    5      3
 2    3    4    5    6      2
 2    3    5    6    7      2

表 2

c1   c2   c3   c4   c5    number
 1    3    4    5    6      3
 1    2    3    4    5      2

選択クエリは、以下の形式でデータの順序を返すことができますか?

結果(表1)

c1   c2   c3   c4   c5    number
 1    2    3    4    5      5
 1    3    4    5    6      3
 2    3    4    5    6      2
 2    3    5    6    7      2
4

3 に答える 3

0

「カウント」が前のクエリの集計関数なのか単純なフィールドなのかは明確ではありませんが、次のデータのように単純なフィールドの場合:

CREATE TABLE table1(
  c1 integer,
  c2 integer,
  c3 integer,
  c4 integer,
  c5 integer,
  count integer
);

INSERT INTO table1 VALUES (1,2,3,4,5,3);
INSERT INTO table1 VALUES (2,3,4,5,6,2);
INSERT INTO table1 VALUES (2,3,5,6,7,2);

CREATE TABLE table2(
  c1 integer,
  c2 integer,
  c3 integer,
  c4 integer,
  c5 integer,
  count integer
);
INSERT INTO table2 VALUES (1,3,4,5,6,3);
INSERT INTO table2 VALUES (1,2,3,4,5,2);

次の方法でデータを取得できます。

SELECT c1, c1,c2, c3, c4,c5,SUM(count) AS count
FROM (
  SELECT * FROM table1
  UNION ALL
  SELECT * FROM table2) AS foo
GROUP BY c1, c2, c3, c4, c5
ORDER BY c1, c2, c3, c4, c5

これがお役に立てば幸いです

于 2013-09-21T12:19:30.363 に答える
0

私はそれが最適化ソリューションではないことを知っていますが、それはあなたの問題を解決します

select 
    a.c1 as c1 , a.c2 as c2, a.c3 as c3, a.c4 as c4, a.c5 as c5, a.count + b.count as count
from
    t1 a
        join
    t2 b ON (a.c1 = b.c1 and a.c2 = b.c2
        and a.c3 = b.c3
        and a.c4 = b.c4
        and a.c5 = b.c5)
union all
(select 
    a.c1 as c1 , a.c2 as c2, a.c3 as c3, a.c4 as c4, a.c5 as c5, a.count  as count
from
    t1 a
        LEFT join
    t2 b ON (a.c1 = b.c1 and a.c2 = b.c2
        and a.c3 = b.c3
        and a.c4 = b.c4
        and a.c5 = b.c5)
WHERE b.c1 is null)
UNION all
select 
    a.c1 as c1 , a.c2 as c2, a.c3 as c3, a.c4 as c4, a.c5 as c5, a.count  as count
from
    t2 a
        LEFT join
    t1 b ON (a.c1 = b.c1 and a.c2 = b.c2
        and a.c3 = b.c3
        and a.c4 = b.c4
        and a.c5 = b.c5)
WHERE b.c1 is null
于 2013-09-21T12:00:59.527 に答える