sql >> Databasteknik >  >> RDS >> PostgreSQL

Kombinera två tabeller till en ny så att valda rader från den andra ignoreras

UNION gör helt enkelt inte som du beskriver. Den här frågan ska:

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 för att utesluta rader från den andra tabellen för samma plats och datum. Se:

  • Välj rader som inte finns i andra tabeller

Använd CREATE TABLE AS istället för SELECT INTO . Manualen:

CREATE TABLE AS är funktionellt lik SELECT INTO . CREATE TABLE AS är den rekommenderade syntaxen, eftersom denna form av SELECT INTO är inte tillgänglig i ECPG eller PL/pgSQL, eftersom de tolkar INTO klausul annorlunda. Dessutom CREATE TABLE AS erbjuder en översättning av funktionaliteten som tillhandahålls av SELECT INTO .

Eller, om måltabellen redan finns:

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

Bortsett från:Jag skulle inte använda date som kolumnnamn. Det är ett reserverat ord i varje SQL-standard och ett funktions- och datatypnamn i Postgres.



  1. Hur man ändrar schema för ett objekt (tabell, vy, lagrad procedur) i SQL Server Database - SQL Server / TSQL självstudie del 28

  2. Hur man tar bort ett SQL Server Agent-jobb i Azure Data Studio

  3. Vad är det bästa sättet att automatiskt generera INSERT-satser för en SQL Server-tabell?

  4. Ta bort fråga och uppdatera i ListView i Android (sqlite)