Não há sintaxe de exclusão de coluna no SQL, há apenas sintaxe de inclusão de coluna (através do operador * para todas as colunas ou listando os nomes das colunas explicitamente).
Gere uma lista apenas das colunas que você deseja
No entanto, você pode gerar a instrução SQL com suas centenas de nomes de coluna, menos as poucas colunas duplicadas que você não deseja, usando tabelas de esquema e algumas funções internas de seu banco de dados.
SELECT
'SELECT sampledata.c1, sampledata.c2, ' || ARRAY_TO_STRING(ARRAY(
SELECT 'demographics' || '.' || column_name
FROM information_schema.columns
WHERE table_name = 'demographics'
AND column_name NOT IN ('zip')
UNION ALL
SELECT 'community' || '.' || column_name
FROM information_schema.columns
WHERE table_name = 'community'
AND column_name NOT IN ('fips')
), ',') || ' FROM sampledata JOIN demographics USING (zip) JOIN community USING (fips)'
AS statement
Isso apenas imprime a instrução, não a executa. Em seguida, basta copiar o resultado e executá-lo.
Se você deseja gerar e executar a instrução dinamicamente de uma só vez, leia sobre como executar SQL dinâmico no Documentação do PostgreSQL .
Anexar os nomes das colunas com o nome da tabela
Alternativamente, isso gera uma lista de seleção de todas as colunas, incluindo aquelas com dados duplicados, mas as alias para incluir também o nome da tabela de cada coluna.
SELECT
'SELECT ' || ARRAY_TO_STRING(ARRAY(
SELECT table_name || '.' || column_name || ' AS ' || table_name || '_' || column_name
FROM information_schema.columns
WHERE table_name in ('sampledata', 'demographics', 'community')
), ',') || ' FROM sampledata JOIN demographics USING (zip) JOIN community USING (fips)'
AS statement
Novamente, isso apenas gera a instrução. Se você quiser gerar e executar a instrução dinamicamente, precisará aprimorar a execução dinâmica de SQL para seu banco de dados, caso contrário, apenas copie e execute o resultado.
Se você realmente deseja um separador de ponto nos aliases de coluna, terá que usar aliases entre aspas duplas, como
SELECT table_name || '.' || column_name || ' AS "' || table_name || '.' || column_name || '"'
. No entanto, aliases com aspas duplas podem causar complicações extras (sensibilidade a maiúsculas e minúsculas, etc.); então, usei o caractere sublinhado para separar o nome da tabela do nome da coluna dentro do alias, e os aliases podem ser tratados como nomes de colunas regulares de outra forma.