sql >> Database >  >> RDS >> PostgreSQL

Combineer twee tabellen tot een nieuwe, zodat geselecteerde rijen uit de andere worden genegeerd

UNION doet gewoon niet wat je beschrijft. Deze zoekopdracht moet:

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 om rijen uit te sluiten van de tweede tabel voor dezelfde locatie en datum. Zie:

  • Selecteer rijen die niet aanwezig zijn in een andere tabel

Gebruik CREATE TABLE AS in plaats van SELECT INTO . De handleiding:

CREATE TABLE AS is functioneel vergelijkbaar met SELECT INTO . CREATE TABLE AS is de aanbevolen syntaxis, aangezien deze vorm van SELECT INTO is niet beschikbaar in ECPG of PL/pgSQL, omdat ze deINTO interpreteren clausule anders. Verder CREATE TABLE AS biedt een superset van de functionaliteit van SELECT INTO .

Of, als de doeltabel al bestaat:

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

Terzijde:ik zou date niet gebruiken als kolomnaam. Het is een gereserveerd woord in elke SQL-standaard en een functie- en gegevenstypenaam in Postgres.



  1. Unieke beperking die lege waarden in MySQL toestaat

  2. Hoe geef je positie nul van de spinner een promptwaarde?

  3. Zijn dynamische mysql-query's met sql-escaping net zo veilig als voorbereide instructies?

  4. Hoe root-wachtwoord opnieuw in te stellen in MySQL 8.0