UNION
gör helt enkelt inte som du beskriver. Den här frågan ska:
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
för att utesluta rader från den andra tabellen för samma plats och datum. Se:
- Välj rader som inte finns i andra tabeller
Använd CREATE TABLE AS
istället för SELECT INTO
. Manualen:
CREATE TABLE AS
är funktionellt likSELECT INTO
.CREATE TABLE AS
är den rekommenderade syntaxen, eftersom denna form avSELECT INTO
är inte tillgänglig i ECPG eller PL/pgSQL, eftersom de tolkarINTO
klausul annorlunda. DessutomCREATE TABLE AS
erbjuder en översättning av funktionaliteten som tillhandahålls avSELECT INTO
.
Eller, om måltabellen redan finns:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
Bortsett från:Jag skulle inte använda date
som kolumnnamn. Det är ett reserverat ord i varje SQL-standard och ett funktions- och datatypnamn i Postgres.