UNION chỉ đơn giản là không làm những gì bạn mô tả. Truy vấn này nên:
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 để loại trừ các hàng khỏi bảng thứ hai cho cùng một vị trí và ngày tháng. Xem:
- Chọn các hàng không có trong bảng khác
Sử dụng CREATE TABLE AS thay vì SELECT INTO . Hướng dẫn sử dụng:
CREATE TABLE AScó chức năng tương tự nhưSELECT INTO.CREATE TABLE ASlà cú pháp được đề xuất, vì dạngSELECT INTOnày không khả dụng trong ECPG hoặc PL / pgSQL, vì chúng diễn giảiINTOmệnh đề khác nhau. Hơn nữa,CREATE TABLE AScung cấp tập hợp các chức năng được cung cấp bởiSELECT INTO.
Hoặc, nếu bảng mục tiêu đã tồn tại:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...
Ngoài ra:Tôi sẽ không sử dụng date như tên cột. Đó là một từ dành riêng trong mọi tiêu chuẩn SQL và một hàm và tên kiểu dữ liệu trong Postgres.