Połącz dwie tabele w nową, aby wybrane wiersze z drugiej były ignorowane
Mam dwie tabele, które mają identyczne kolumny. Chciałbym połączyć te dwie tabele w jedną trzecią, która zawiera wszystkie wiersze z pierwszego, a z drugiej wszystkie wiersze, które mają datę, która nie istnieje w pierwszej tabeli dla tej samej lokalizacji.
Przykład:
transakcje:
date |location_code| product_code | quantity
------------+------------------+--------------+----------
2013-01-20 | ABC | 123 | -20
2013-01-23 | ABC | 123 | -13.158
2013-02-04 | BCD | 234 | -4.063
transakcje2:
date |location_code| product_code | quantity
------------+------------------+--------------+----------
2013-01-20 | BDE | 123 | -30
2013-01-23 | DCF | 123 | -2
2013-02-05 | UXJ | 234 | -6
Pożądany rezultat:
date |location_code| product_code | quantity
------------+------------------+--------------+----------
2013-01-20 | ABC | 123 | -20
2013-01-23 | ABC | 123 | -13.158
2013-01-23 | DCF | 123 | -2
2013-02-04 | BCD | 234 | -4.063
2013-02-05 | UXJ | 234 | -6
Jak bym to zrobił? Próbowałem na przykład tego:
SELECT date, location_code, product_code, type, quantity, location_type, updated_at
,period_start_date, period_end_date
INTO transactions_combined
FROM ( SELECT * FROM transactions_kitchen k
UNION ALL
SELECT *
FROM transactions_admin h
WHERE h.date NOT IN (SELECT k.date FROM k)
) AS t;
ale to nie bierze pod uwagę, że chciałbym uwzględnić wiersze, które mają tę samą datę, ale inną lokalizację. Używam Postgresql 9.2.