Es gibt keine Spaltenausschlusssyntax in SQL, es gibt nur eine Spalteneinschlusssyntax (über den *-Operator für alle Spalten oder explizites Auflisten der Spaltennamen).
Generieren Sie eine Liste nur der gewünschten Spalten
Sie könnten jedoch die SQL-Anweisung mit ihren Hunderten von Spaltennamen, abzüglich der wenigen doppelten Spalten, die Sie nicht möchten, mithilfe von Schematabellen und einigen integrierten Funktionen Ihrer Datenbank generieren.
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
Dadurch wird die Anweisung nur ausgedruckt, nicht ausgeführt. Dann kopieren Sie einfach das Ergebnis und führen es aus.
Wenn Sie die Anweisung auf einmal dynamisch generieren und ausführen möchten, können Sie im PostgreSQL-Dokumentation .
Spaltennamen dem Tabellennamen voranstellen
Alternativ generiert dies eine Auswahlliste aller Spalten, einschließlich derjenigen mit doppelten Daten, aber aliasiert sie dann so, dass sie auch den Tabellennamen jeder Spalte enthält.
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
Auch hier wird nur die Anweisung generiert. Wenn Sie die Anweisung sowohl dynamisch generieren als auch ausführen möchten, müssen Sie die dynamische SQL-Ausführung für Ihre Datenbank aufpolieren, andernfalls kopieren Sie einfach das Ergebnis und führen es aus.
Wenn Sie wirklich ein Punkttrennzeichen in den Spaltenaliasen wollen, müssen Sie Aliase in doppelten Anführungszeichen wie SELECT table_name || '.' || column_name || ' AS "' || table_name || '.' || column_name || '"'
. Aliase in doppelten Anführungszeichen können jedoch zusätzliche Komplikationen verursachen (Groß- und Kleinschreibung usw.); Daher habe ich stattdessen den Unterstrich verwendet, um den Tabellennamen vom Spaltennamen innerhalb des Alias zu trennen, und die Aliase können dann ansonsten wie reguläre Spaltennamen behandelt werden.