UNION
macht einfach nicht das was du beschreibst. Diese Abfrage sollte:
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
um Zeilen aus der zweiten Tabelle für denselben Ort und dasselbe Datum auszuschließen. Siehe:
- Wählen Sie Zeilen aus, die in keiner anderen Tabelle vorhanden sind
Verwenden Sie CREATE TABLE AS
statt SELECT INTO
. Das Handbuch:
CREATE TABLE AS
ist funktional ähnlich zu SELECT INTO
. CREATE TABLE AS
ist die empfohlene Syntax, da diese Form von SELECT INTO
ist in ECPG oder PL/pgSQL nicht verfügbar, da sie den INTO
interpretieren Klausel anders. Außerdem CREATE TABLE AS
bietet eine Obermenge der von SELECT INTO
bereitgestellten Funktionalität .
Oder, wenn die Zieltabelle bereits existiert:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
Übrigens:date
würde ich nicht verwenden als Spaltenname. Es ist ein reserviertes Wort in jedem SQL-Standard und ein Funktions- und Datentypname in Postgres.