UNION hanya tidak melakukan apa yang Anda gambarkan. Kueri ini harus:
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 untuk mengecualikan baris dari tabel kedua untuk lokasi dan tanggal yang sama. Lihat:
- Pilih baris yang tidak ada di tabel lain
Gunakan CREATE TABLE AS alih-alih SELECT INTO . Panduan:
CREATE TABLE ASsecara fungsional mirip denganSELECT INTO.CREATE TABLE ASadalah sintaks yang disarankan, karena bentukSELECT INTOini tidak tersedia di ECPG atau PL/pgSQL, karena mereka menafsirkanINTOklausa secara berbeda. Selanjutnya,CREATE TABLE ASmenawarkan superset fungsionalitas yang disediakan olehSELECT INTO.
Atau, jika tabel target sudah ada:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
Selain:Saya tidak akan menggunakan date sebagai nama kolom. Ini adalah kata yang dicadangkan di setiap standar SQL dan nama fungsi dan tipe data di Postgres.