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.