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.