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

Kombiner to tabeller til en ny, så udvalgte rækker fra den anden ignoreres

UNION gør simpelthen ikke det du beskriver. Denne forespørgsel skal:

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 at ekskludere rækker fra den anden tabel for den samme placering og dato. Se:

  • Vælg rækker, der ikke er til stede i en anden tabel

Brug CREATE TABLE AS i stedet for SELECT INTO . Manualen:

CREATE TABLE AS er funktionelt magen til SELECT INTO . CREATE TABLE AS er den anbefalede syntaks, da denne form for SELECT INTO er ikke tilgængelig i ECPG eller PL/pgSQL, fordi de fortolkerINTO klausul anderledes. Desuden CREATE TABLE AS tilbyder en oversættelse af funktionaliteten leveret af SELECT INTO .

Eller, hvis måltabellen allerede eksisterer:

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

Bortset fra:Jeg ville ikke bruge date som kolonnenavn. Det er et reserveret ord i enhver SQL-standard og et funktions- og datatypenavn i Postgres.



  1. Hvordan får jeg ID'et for flere indsatte rækker i MySQL?

  2. Antal antal fortløbende forekomst af værdier i tabel

  3. Brug MySQL rumlige udvidelser til at vælge punkter inde i cirklen

  4. Sådan oprettes fremmednøglebegrænsning på flere kolonner i SQL Server - SQL Server / TSQL vejledning del 67