2011-03-16 17 views
1

のPostgres必要とする:どのように重複することなく、同じ主キーを持つ2つのテーブルを挿入テーブルを作成して、私はすべてのデータ

create table stock(item_id int primary key, balance float); 
insert into stock values(10,2200); 
insert into stock values(20,1900); 
select * from stock; 

create table buy(item_id int primary key, volume float); 
insert into buy values(10,1000); 
insert into buy values(30,300); 
select * from buy; 

結果を:

item_id | balance 
---------+--------- 
     10 | 2200 
     20 | 1900 
(2 rows) 


item_id | volume 
---------+-------- 
     10 | 1000 
     30 | 300 
(2 rows) 

は、今私は、これらを含め、別のテーブルをしたいです2つのテーブルのデータ。 item_id(10,20,30)で3行のデータがあり、重複のない新しいテーブル

私はこのためのクエリが必要です。マージまたは結合のいずれかによって

答えて

1

あなたはinsert into ... select構文を使用することができます。

create table mytable(item_id int primary key, balance float, volume float); 

insert into mytable 
select distinct stock.item_id, balance, volume 
from stock 
inner join buy on buy.item_id = stock.item_id; 

left joinまたはfull join)必要な場合は、参加の異なるタイプを使用することができます。あなたのケースでは、あなたはfull joinが必要だと思うが、私はこの例ではinner joinに固執するとは確信していない。

+0

屋私はあなたのポイントを得たが、私はITEM_ID のような必要があります。おそらく、あなたはfull joinを探していますバランス|ボリューム --------- + --------- + -------- 10 | 2200 | 1000 20 | 1900年| 30 | | 300 を出力し、前と同じように別のテーブルに挿入する必要があります。 – Bhargava

+0

+1は私が思った以上に推測しています。しかし、「別個」については確信していません。 'item_id'は両方のテーブルでユニークです。 –

1

私は推測している:

あなたは本当に「買い」テーブル内の値が「株式」 から控除されることになっていることを表
  • ではなく、ビューを望む
    • ので、ここで私はあなたが後にしていると思うものです:

      create view v_current_stock as 
      select item_id, sum(balance) as balance 
      from (select item_id, balance from stock 
           union all 
           select item_id, -volume from buy) 
      group by item_id; 
      



      EDIT:私の推測がちょっとだったようです(コメントを見てください)。 |

      create view v as 
      select * from stock full join buy using (item_id); 
      
      
      select * from v; 
      
      
      item_id | balance | volume 
      ---------+---------+-------- 
           10 | 2200 | 1000 
           20 | 1900 | 
           30 |   | 300 
      
  • +0

    ビュービットを "推測する"ために+1 –

    +0

    ya私はあなたの意見を持っていますが、私のように必要です item_id |バランス|ボリューム --------- + --------- + -------- 10 | 2200 | 1000 20 | 1900年| 30 | | 300 を出力し、別のテーブルに挿入する必要があります。 – Bhargava

    +0

    私は正確に欲しいと私に答えるためにsomuchありがとう – Bhargava

    関連する問題