Det finns ingen uteslutningssyntax för kolumner i SQL, det finns bara syntax för kolumninkludering (via *-operatorn för alla kolumner, eller explicit lista kolumnnamnen).
Skapa en lista över endast kolumner du vill ha
Du kan dock generera SQL-satsen med dess hundratals kolumnnamn, minus de få dubbletter av kolumner du inte vill ha, med hjälp av schematabeller och några inbyggda funktioner i din databas.
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
Detta skriver bara ut uttalandet, det kör det inte. Sedan kopierar du bara resultatet och kör det.
Om du vill både generera och köra satsen dynamiskt på en gång kan du läsa om hur du kör dynamisk SQL i PostgreSQL-dokumentation .
Föregå kolumnnamn med tabellnamn
Alternativt genererar detta en urvalslista över alla kolumner, inklusive de med dubbletter av data, men sedan alias dem för att inkludera tabellnamnet för varje kolumn också.
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
Återigen, detta genererar bara uttalandet. Om du vill både generera och köra satsen dynamiskt, måste du fräscha upp dynamisk SQL-körning för din databas, annars är det bara att kopiera och köra resultatet.
Om du verkligen vill ha en punktavgränsare i kolumnaliasen, måste du använda alias med dubbla citationstecken som t.ex. SELECT table_name || '.' || column_name || ' AS "' || table_name || '.' || column_name || '"'
. Dock kan alias med dubbla citattecken orsaka extra komplikationer (skiftlägeskänslighet, etc); så jag använde understreckstecknet istället för att separera tabellnamnet från kolumnnamnet i aliaset, och aliasen kan då behandlas som vanliga kolumnnamn annars.