UNION
simplemente no hace lo que describes. Esta consulta debe:
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
para excluir filas de la segunda tabla para la misma ubicación y fecha. Ver:
- Seleccionar filas que no están presentes en otra tabla
Usa CREATE TABLE AS
en lugar de SELECT INTO
. El manual:
CREATE TABLE AS
es funcionalmente similar a SELECT INTO
. CREATE TABLE AS
es la sintaxis recomendada, ya que esta forma de SELECT INTO
no está disponible en ECPG o PL/pgSQL, porque interpretan el INTO
cláusula de manera diferente. Además, CREATE TABLE AS
ofrece un superconjunto de la funcionalidad proporcionada por SELECT INTO
.
O, si la tabla de destino ya existe:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
Aparte:no usaría date
como nombre de columna. Es una palabra reservada en cada estándar SQL y un nombre de función y tipo de datos en Postgres.