UNION
semplicemente non fa quello che descrivi. Questa query dovrebbe:
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
per escludere righe dalla seconda tabella per la stessa posizione e data. Vedi:
- Seleziona le righe che non sono presenti in un'altra tabella
Usa CREATE TABLE AS
invece di SELECT INTO
. Il manuale:
CREATE TABLE AS
è funzionalmente simile a SELECT INTO
. CREATE TABLE AS
è la sintassi consigliata, poiché questa forma di SELECT INTO
non è disponibile in ECPG o PL/pgSQL, perché interpretano il INTO
clausola in modo diverso. Inoltre, CREATE TABLE AS
offre un superset delle funzionalità fornite da SELECT INTO
.
Oppure, se la tabella di destinazione esiste già:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
A parte:non userei date
come nome della colonna. È una parola riservata in ogni standard SQL e un nome di funzione e tipo di dati in Postgres.