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 ASest fonctionnellement similaire àSELECT INTO.CREATE TABLE ASest la syntaxe recommandée, puisque cette forme deSELECT INTOn'est pas disponible dans ECPG ou PL/pgSQL, car ils interprètent leINTOclause différemment. De plus,CREATE TABLE ASoffre un sur-ensemble des fonctionnalités fournies parSELECT 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.