UNION
simplesmente não faz o que você descreve. Esta consulta deve: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
para excluir linhas da segunda tabela para o mesmo local e data. Ver:- Selecione as linhas que não estão presentes em outra tabela
Use
CREATE TABLE AS
em vez de SELECT INTO
. O manual:
CREATE TABLE AS
é funcionalmente semelhante aSELECT INTO
.CREATE TABLE AS
é a sintaxe recomendada, pois esta forma deSELECT INTO
não está disponível em ECPG ou PL/pgSQL, porque eles interpretam oINTO
cláusula diferente. Além disso,CREATE TABLE AS
oferece um superconjunto da funcionalidade fornecida porSELECT INTO
.
Ou, se a tabela de destino já existir:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
Além:eu não usaria
date
como nome da coluna. É uma palavra reservada em todo padrão SQL e um nome de função e tipo de dados no Postgres.