Mysql
 sql >> Database >  >> RDS >> Mysql

Elimina le righe duplicate in un'istruzione SELECT di PostgreSQL

PostgreSQL al momento non consente GROUP BY ambigui istruzioni in cui i risultati dipendono dall'ordine di scansione della tabella, dal piano utilizzato, ecc. È così che lo standard dice che dovrebbe funzionare AFAIK, ma alcuni database (come le versioni di MySQL precedenti alla 5.7) consentono query più flessibili che selezionano solo il primo valore incontrati per gli elementi che appaiono in SELECT elenco ma non in GROUP BY .

In PostgreSQL, dovresti usare DISTINCT ON per questo tipo di query.

Vuoi scrivere qualcosa come:

SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author 
left join anwendung on anwendung.name = autor.anwendung;

(Sintassi corretta in base al commento successivo)

Questo è un po' come ANY_VALUE(...) di MySQL 5.7 pseudo-funzione per group by , ma al contrario - dice che i valori in distinct on la clausola deve essere univoca e qualsiasi valore è accettabile per le colonne non specificato.

A meno che non ci sia un ORDER BY , non vi è alcuna garanzia su quali valori siano selezionati. Di solito dovresti avere un ORDER BY per prevedibilità.

È stato anche notato che utilizzando un aggregato come min() o max() funzionerebbe. Anche se questo è vero e porterà a risultati affidabili e prevedibili, a differenza dell'utilizzo di DISTINCT ON o un ambiguo GROUP BY - ha un costo di prestazioni dovuto alla necessità di ordinamento o aggregazione extra e funziona solo per i tipi di dati ordinali.