PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Combina due tabelle in una nuova in modo che le righe selezionate dall'altra vengano ignorate

UNION semplicemente non fa quello che descrivi. Questa query dovrebbe:

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 per escludere righe dalla seconda tabella per la stessa posizione e data. Vedi:

  • Seleziona le righe che non sono presenti in un'altra tabella

Usa CREATE TABLE AS invece di SELECT INTO . Il manuale:

CREATE TABLE AS è funzionalmente simile a SELECT INTO . CREATE TABLE AS è la sintassi consigliata, poiché questa forma di SELECT INTO non è disponibile in ECPG o PL/pgSQL, perché interpretano il INTO clausola in modo diverso. Inoltre, CREATE TABLE AS offre un superset delle funzionalità fornite da SELECT INTO .

Oppure, se la tabella di destinazione esiste già:

INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...

A parte:non userei date come nome della colonna. È una parola riservata in ogni standard SQL e un nome di funzione e tipo di dati in Postgres.