PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Połącz dwie tabele w nową, tak aby wybrane wiersze z drugiej były ignorowane

UNION po prostu nie robi tego, co opisujesz. To zapytanie powinno:

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 aby wykluczyć wiersze z drugiej tabeli dla tej samej lokalizacji i daty. Zobacz:

  • Wybierz wiersze, których nie ma w innej tabeli

Użyj CREATE TABLE AS zamiast SELECT INTO . Instrukcja:

CREATE TABLE AS jest funkcjonalnie podobny do SELECT INTO . CREATE TABLE AS jest zalecaną składnią, ponieważ ta forma SELECT INTO nie jest dostępny w ECPG lub PL/pgSQL, ponieważ interpretują INTO klauzula inaczej. Ponadto CREATE TABLE AS oferuje superzestaw funkcji dostarczanych przez SELECT INTO .

Lub, jeśli tabela docelowa już istnieje:

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

Poza tym:nie użyłbym date jako nazwę kolumny. Jest to zastrzeżone słowo w każdym standardzie SQL oraz nazwa funkcji i typu danych w Postgresie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Naprawianie dziur/luk w liczbach generowanych przez sekwencję Postgres

  2. Barman 2.11:barman-cloud-restore i barman-cloud-wal-restore

  3. Hibernate, Postgresql:Kolumna x jest typu oid, ale wyrażenie jest typu byte

  4. O wpływie całostronicowych zapisów

  5. Jak utworzyć widok SQL za pomocą SQLAlchemy?