sql >> Databáze >  >> RDS >> PostgreSQL

Zkombinujte dvě tabulky do nové, takže vybrané řádky z druhé tabulky budou ignorovány

UNION prostě nedělá to, co popisuješ. Tento dotaz by měl:

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 pro vyloučení řádků z druhé tabulky pro stejné místo a datum. Viz:

  • Vyberte řádky, které nejsou uvedeny v jiné tabulce

Použijte CREATE TABLE AS místo SELECT INTO . Manuál:

CREATE TABLE AS je funkčně podobný SELECT INTO . CREATE TABLE AS je doporučená syntaxe, protože tato forma SELECT INTO není k dispozici v ECPG nebo PL/pgSQL, protože interpretují INTO doložka jinak. Dále CREATE TABLE AS nabízí supermnožinu funkcí poskytovaných SELECT INTO .

Nebo, pokud cílová tabulka již existuje:

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

Stranou:nepoužil bych date jako název sloupce. Je to vyhrazené slovo v každém standardu SQL a název funkce a datového typu v Postgres.



  1. @BatchSize chytré nebo hloupé použití?

  2. Jak vrátit více hodnot v jednom sloupci (T-SQL)?

  3. Jak používat Návrhář dotazů v SQL Server

  4. Příklady WEEK() – MySQL