sql >> Base de Datos >  >> RDS >> PostgreSQL

Combine dos tablas en una nueva para que se ignoren las filas seleccionadas de la otra

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.