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 deSELECT INTO
n'est pas disponible dans ECPG ou PL/pgSQL, car ils interprètent leINTO
clause différemment. De plus,CREATE TABLE AS
offre 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.