Как создать таблицу, которая вставляет две таблицы, имеющие один и тот же первичный ключ без дубликатов, и мне нужны все данные - PullRequest
2 голосов
/ 16 марта 2011

Postgres:

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)

Теперь я хочу другую таблицу, которая включает в себя данные этих двух таблиц.Новая таблица, которая имеет 3 строки данных с item_id (10,20,30) и без дублирования

Мне нужен запрос для этого;либо слиянием, либо присоединением.

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Я предполагаю:

  • , что вы действительно хотите представление, а не таблицу
  • , что значения в таблице 'buy' должны быть вычтены из 'stock '

так вот, что я думаю, что вы после:

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;



РЕДАКТИРОВАТЬ: кажется, что мои догадки были немного отклонены (см. комментарии).Возможно, вы ищете full join:
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
1 голос
/ 16 марта 2011

Вы можете использовать синтаксис 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 в примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...