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 tolkarINTOklausul annorlunda. DessutomCREATE TABLE ASerbjuder 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.