PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

tidak termasuk bidang duplikat dalam gabungan

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psycopg2.OperationalError:FATAL:protokol frontend tidak didukung 1234.5679:server mendukung 2.0 hingga 3.0

  2. Ubah Hari Julian menjadi Tanggal di PostgreSQL

  3. Cara menonaktifkan pernyataan yang disiapkan di heroku dengan database postgres

  4. Cara Menginstal PostgreSQL 12 di Ubuntu 20.04/18.04/16.04

  5. Postgres UPDATE to_tsvector memperbarui semua baris ke nilai yang sama