PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Combinez deux tables en une nouvelle afin que les lignes sélectionnées de l'autre soient ignorées

UNION ne fait tout simplement pas ce que vous décrivez. Cette requête doit :

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 pour exclure des lignes de la deuxième table pour le même emplacement et la même date. Voir :

  • Sélectionnez les lignes qui ne sont pas présentes dans un autre tableau

Utilisez CREATE TABLE AS au lieu de SELECT INTO . Le manuel :

CREATE TABLE AS est fonctionnellement similaire à SELECT INTO . CREATE TABLE AS est la syntaxe recommandée, puisque cette forme de SELECT INTO n'est pas disponible dans ECPG ou PL/pgSQL, car ils interprètent le INTO clause différemment. De plus, CREATE TABLE AS offre un sur-ensemble des fonctionnalités fournies par SELECT INTO .

Ou, si la table cible existe déjà :

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

A part :je n'utiliserais pas date comme nom de colonne. C'est un mot réservé dans chaque standard SQL et un nom de fonction et de type de données dans Postgres.