UNION
po prostu nie robi tego, co opisujesz. To zapytanie powinno:
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
aby wykluczyć wiersze z drugiej tabeli dla tej samej lokalizacji i daty. Zobacz:
- Wybierz wiersze, których nie ma w innej tabeli
Użyj CREATE TABLE AS
zamiast SELECT INTO
. Instrukcja:
CREATE TABLE AS
jest funkcjonalnie podobny do SELECT INTO
. CREATE TABLE AS
jest zalecaną składnią, ponieważ ta forma SELECT INTO
nie jest dostępny w ECPG lub PL/pgSQL, ponieważ interpretują INTO
klauzula inaczej. Ponadto CREATE TABLE AS
oferuje superzestaw funkcji dostarczanych przez SELECT INTO
.
Lub, jeśli tabela docelowa już istnieje:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
Poza tym:nie użyłbym date
jako nazwę kolumny. Jest to zastrzeżone słowo w każdym standardzie SQL oraz nazwa funkcji i typu danych w Postgresie.