PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

wykluczanie zduplikowanych pól w łączeniu

W SQL nie ma składni wykluczania kolumn, istnieje tylko składnia włączania kolumn (poprzez operator * dla wszystkich kolumn lub jawne wylistowanie nazw kolumn).

Generuj listę tylko wybranych kolumn

Możesz jednak wygenerować instrukcję SQL z setkami nazw kolumn, bez kilku zduplikowanych kolumn, których nie chcesz, używając tabel schematów i niektórych wbudowanych funkcji bazy danych.

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

To tylko wypisuje instrukcję, nie wykonuje jej. Następnie wystarczy skopiować wynik i uruchomić go.

Jeśli chcesz jednocześnie wygenerować i uruchomić instrukcję dynamicznie, możesz przeczytać, jak uruchomić dynamiczny SQL w Dokumentacja PostgreSQL .

Dołącz nazwy kolumn do nazwy tabeli

Alternatywnie, generuje to listę wyboru wszystkich kolumn, w tym tych ze zduplikowanymi danymi, ale następnie tworzy ich aliasy, aby zawierały również nazwę tabeli każdej kolumny.

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

Ponownie, to tylko generuje oświadczenie. Jeśli chcesz zarówno generować, jak i uruchamiać instrukcję dynamicznie, musisz odświeżyć dynamiczne wykonywanie SQL dla swojej bazy danych, w przeciwnym razie po prostu skopiuj i uruchom wynik.

Jeśli naprawdę potrzebujesz separatora kropek w aliasach kolumn, musisz użyć aliasów z podwójnym cudzysłowem, takich jak SELECT table_name || '.' || column_name || ' AS "' || table_name || '.' || column_name || '"' . Jednak aliasy w podwójnym cudzysłowie mogą powodować dodatkowe komplikacje (rozróżnianie wielkości liter itp.); więc zamiast tego użyłem znaku podkreślenia, aby oddzielić nazwę tabeli od nazwy kolumny w aliasie, a aliasy można wtedy traktować jak zwykłe nazwy kolumn w przeciwnym razie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. transfer danych z jednej bazy danych do innej bazy w odoo

  2. Surowe zapytanie Railsowe dla formatu csv, które ma zostać zwrócone przez kontroler

  3. Zbuduj obraz centrum dokowania klawiatury w trybie openshift za pomocą polecenia nowej aplikacji

  4. Kolejka zadań jako tabela SQL z wieloma konsumentami (PostgreSQL)

  5. Jak filtrować wiersze według wartości zagnieżdżonych w kolumnie json?