2

と の 2 つのテーブルがBucket1ありBucket2ます。

両方の表の列は次のとおりですToyIdPrice

Bucket1
-----------------------------
ToyId        |    Price
-----------------------------
A            |    10
B            |    20
C            |    30
D            |    40
E            |    50
-----------------------------

Bucket2
-----------------------------
ToyId        |    Price
-----------------------------
D            |    45
E            |    50
F            |    60
G            |    70
H            |    80
-----------------------------

以下のような結果のテーブルが必要です。

Result
-----------------------------------------------------------
ToyId        |    PriceTab1    |    PriceTab2   |   Diff
-----------------------------------------------------------
A            |    10           |    NA          |    NA
B            |    20           |    NA          |    NA
C            |    30           |    NA          |    NA
D            |    40           |    45          |    5
E            |    50           |    50          |    0
F            |    NA           |    80          |    NA
G            |    NA           |    90          |    NA
H            |    NA           |    100         |    NA
-----------------------------------------------------------

上記の表には以下が含まれます: 1) 一般的なおもちゃ (D、E)

2) Bucket1 には入っているが Bucket2 には入っていないおもちゃ (A、B、C)

3) Bucket2 にあるが Bucket3 にないおもちゃ (F、G、H)

4) 該当する場合の価格の違い (D、E)

単一のクエリでこれを達成することは可能ですか?

読んでくれてありがとう!

4

2 に答える 2

3

テーブル

create table b1 (
  t_id varchar(1),
  price int
  );

  create table b2 (
  t_id varchar(1),
  price int
  );

 insert into b1 (t_id, price)
             values
             ('a', 10),('b', 20),('c', 30),('d', 40),('e', 50);
insert into b2 (t_id, price)
             values
             ('d', 45),('e', 50),('f', 60),('g', 70),('h', 80);  

選択する

select t_id, sum(price1), sum(price2) 
from 
  (select t_id, price as price1, null as price2 from b1
   union all 
   select t_id, null as price1, price as price2 from b2) res
group by t_id;

差分計算を範囲外のままにしました

http://sqlfiddle.com/#!2/c669fc/6

于 2013-09-06T06:46:45.473 に答える
2

これは の典型的な例ですFULL JOIN:

SELECT
    COALESCE(b1.ToyId, b2.ToyId)  AS ToyId,
    b1.Price                      AS PriceTab1,
    b2.Price                      AS PriceTab2,
    (b2.Price-b1.Price)           AS Diff
FROM
    Bucket1 AS b1
  FULL JOIN
    Bucket2 AS b2
      ON b1.ToyId = b2.ToyId ;
于 2013-09-06T06:35:23.300 に答える