UNION
prostě nedělá to, co popisuješ. Tento dotaz by měl:
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
pro vyloučení řádků z druhé tabulky pro stejné místo a datum. Viz:
- Vyberte řádky, které nejsou uvedeny v jiné tabulce
Použijte CREATE TABLE AS
místo SELECT INTO
. Manuál:
CREATE TABLE AS
je funkčně podobnýSELECT INTO
.CREATE TABLE AS
je doporučená syntaxe, protože tato formaSELECT INTO
není k dispozici v ECPG nebo PL/pgSQL, protože interpretujíINTO
doložka jinak. DáleCREATE TABLE AS
nabízí supermnožinu funkcí poskytovanýchSELECT INTO
.
Nebo, pokud cílová tabulka již existuje:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
Stranou:nepoužil bych date
jako název sloupce. Je to vyhrazené slovo v každém standardu SQL a název funkce a datového typu v Postgres.