Combine duas tabelas em uma nova para que as linhas selecionadas da outra sejam ignoradas
Eu tenho duas tabelas que possuem colunas idênticas. Eu gostaria de juntar essas duas tabelas em uma terceira que contém todas as linhas da primeira e da segunda todas as linhas que têm uma data que não existe na primeira tabela para a mesma localização.
Exemplo:
transações:
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
transações2:
date |location_code| product_code | quantity
------------+------------------+--------------+----------
2013-01-20 | BDE | 123 | -30
2013-01-23 | DCF | 123 | -2
2013-02-05 | UXJ | 234 | -6
Resultado desejado:
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
Como eu iria sobre isso? Eu tentei por exemplo isto:
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;
mas isso não leva em conta que eu gostaria de incluir as linhas que têm a mesma data, mas localização diferente. Eu tenho o Postgresql 9.2 em uso.