Tidak ada sintaksis pengecualian kolom dalam SQL, hanya ada sintaksis penyertaan kolom (melalui operator * untuk semua kolom, atau mencantumkan nama kolom secara eksplisit).
Hasilkan daftar kolom yang Anda inginkan
Namun, Anda dapat membuat pernyataan SQL dengan ratusan nama kolomnya, dikurangi beberapa kolom duplikat yang tidak Anda inginkan, menggunakan tabel skema dan beberapa fungsi bawaan database Anda.
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
Ini hanya mencetak pernyataan, tidak menjalankannya. Kemudian Anda tinggal menyalin hasilnya dan menjalankannya.
Jika Anda ingin membuat dan menjalankan pernyataan secara dinamis sekaligus, maka Anda dapat membaca tentang cara menjalankan SQL dinamis di Dokumentasi PostgreSQL .
Tambahkan nama kolom dengan nama tabel
Sebagai alternatif, ini menghasilkan daftar pilihan dari semua kolom, termasuk yang memiliki data duplikat, tetapi kemudian membuat alias untuk menyertakan nama tabel setiap kolom juga.
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
Sekali lagi, ini hanya menghasilkan pernyataan. Jika Anda ingin membuat dan menjalankan pernyataan secara dinamis, maka Anda harus memoles eksekusi SQL dinamis untuk database Anda, jika tidak cukup salin dan jalankan hasilnya.
Jika Anda benar-benar menginginkan pemisah titik di alias kolom, maka Anda harus menggunakan alias dengan tanda kutip ganda seperti SELECT table_name || '.' || column_name || ' AS "' || table_name || '.' || column_name || '"'
. Namun, alias yang dikutip ganda dapat menyebabkan komplikasi tambahan (sensitivitas huruf besar-kecil, dll); jadi, saya menggunakan karakter garis bawah sebagai gantinya untuk memisahkan nama tabel dari nama kolom dalam alias, dan alias kemudian dapat diperlakukan seperti nama kolom biasa.