PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Combine duas tabelas em uma nova para que as linhas selecionadas da outra sejam ignoradas


UNION simplesmente não faz o que você descreve. Esta consulta deve:
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 para excluir linhas da segunda tabela para o mesmo local e data. Ver:
  • Selecione as linhas que não estão presentes em outra tabela

Use CREATE TABLE AS em vez de SELECT INTO . O manual:

CREATE TABLE AS é funcionalmente semelhante a SELECT INTO . CREATE TABLE AS é a sintaxe recomendada, pois esta forma de SELECT INTO não está disponível em ECPG ou PL/pgSQL, porque eles interpretam o INTO cláusula diferente. Além disso, CREATE TABLE AS oferece um superconjunto da funcionalidade fornecida por SELECT INTO .

Ou, se a tabela de destino já existir:
INSERT INTO transactions_combined (<list names of target column here!>)
SELECT ...

Além:eu não usaria date como nome da coluna. É uma palavra reservada em todo padrão SQL e um nome de função e tipo de dados no Postgres.