UNION gør simpelthen ikke det du beskriver. Denne forespørgsel skal:
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 at ekskludere rækker fra den anden tabel for den samme placering og dato. Se:
- Vælg rækker, der ikke er til stede i en anden tabel
Brug CREATE TABLE AS i stedet for SELECT INTO . Manualen:
CREATE TABLE AS er funktionelt magen til SELECT INTO . CREATE TABLE AS er den anbefalede syntaks, da denne form for SELECT INTO er ikke tilgængelig i ECPG eller PL/pgSQL, fordi de fortolkerINTO klausul anderledes. Desuden CREATE TABLE AS tilbyder en oversættelse af funktionaliteten leveret af SELECT INTO .
Eller, hvis måltabellen allerede eksisterer:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
Bortset fra:Jeg ville ikke bruge date som kolonnenavn. Det er et reserveret ord i enhver SQL-standard og et funktions- og datatypenavn i Postgres.