V SQL neexistuje žádná syntaxe vyloučení sloupců, existuje pouze syntaxe zahrnutí sloupců (prostřednictvím operátoru * pro všechny sloupce nebo explicitním uvedením názvů sloupců).
Vygenerujte seznam pouze požadovaných sloupců
Můžete však vygenerovat příkaz SQL se stovkami názvů sloupců, mínus pár duplicitních sloupců, které nechcete, pomocí tabulek schémat a některých vestavěných funkcí vaší databáze.
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
Tím se výpis pouze vytiskne, neprovede se. Pak už jen zkopírujete výsledek a spustíte jej.
Pokud chcete příkaz generovat a spouštět dynamicky najednou, můžete si přečíst o tom, jak spustit dynamický SQL v Dokumentace PostgreSQL .
Před názvy sloupců uveďte název tabulky
Alternativně se tím vygeneruje výběrový seznam všech sloupců, včetně těch s duplicitními daty, ale pak jim vytvoří alias tak, aby obsahoval i název tabulky každého sloupce.
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
Opět to pouze vygeneruje prohlášení. Pokud chcete příkaz generovat i spouštět dynamicky, budete muset oprášit dynamické provádění SQL pro vaši databázi, jinak stačí zkopírovat a spustit výsledek.
Pokud opravdu chcete v aliasech sloupců oddělovač teček, budete muset použít aliasy s dvojitými uvozovkami, jako je SELECT table_name || '.' || column_name || ' AS "' || table_name || '.' || column_name || '"'
. Aliasy v uvozovkách však mohou způsobit další komplikace (rozlišování malých a velkých písmen atd.); takže jsem místo toho použil znak podtržítka k oddělení názvu tabulky od názvu sloupce v rámci aliasu a s aliasy pak lze zacházet jako s běžnými názvy sloupců jinak.