PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Комбинирайте две таблици в нова, така че избраните редове от другата да бъдат игнорирани

UNION просто не прави това, което описваш. Тази заявка трябва:

CREATE TABLE AS 
SELECT date, location_code, product_code, quantity
FROM   transactions_kitchen k

UNION  ALL
SELECT h.date, h.location_code, h.product_code, h.quantity
FROM   transactions_admin h
LEFT   JOIN transactions_kitchen k USING (location_code, date)
WHERE  k.location_code IS NULL;

LEFT JOIN / IS NULL за да изключите редове от втората таблица за същото местоположение и дата. Вижте:

  • Изберете редове, които не присъстват в друга таблица

Използвайте CREATE TABLE AS вместо SELECT INTO . Ръководството:

CREATE TABLE AS е функционално подобен на SELECT INTO . CREATE TABLE AS е препоръчителният синтаксис, тъй като тази форма на SELECT INTO не е наличен в ECPG или PL/pgSQL, тъй като те интерпретират INTO клауза различно. Освен това, CREATE TABLE AS предлага като супернабор от функционалността, предоставена от SELECT INTO .

Или, ако целевата таблица вече съществува:

INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...

Настрана:не бих използвал date като име на колона. Това е запазена дума във всеки SQL стандарт и име на функция и тип данни в Postgres.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изтрия стойност на тип enum в postgres?

  2. PostgreSQL 9.6:Паралелно последователно сканиране

  3. Опростете вложен случай, когато израз

  4. Синтактична грешка на Postgres drop table

  5. Django връзка с postgres чрез docker-compose