Mysql
 sql >> Base de données >  >> RDS >> Mysql

Éliminer les lignes en double dans une instruction PostgreSQL SELECT

PostgreSQL n'autorise pas actuellement l'ambiguïté GROUP BY des instructions où les résultats dépendent de l'ordre dans lequel la table est analysée, du plan utilisé, etc. rencontrés pour les éléments apparaissant dans le SELECT list mais pas dans GROUP BY .

Dans PostgreSQL, vous devez utiliser DISTINCT ON pour ce type de requête.

Vous voulez écrire quelque chose comme :

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

(Syntaxe corrigée en fonction du commentaire de suivi)

C'est un peu comme ANY_VALUE(...) de MySQL 5.7 pseudo-fonction pour group by , mais à l'envers - il dit que les valeurs dans le distinct on la clause doit être unique et toute valeur est acceptable pour les colonnes not spécifié.

Sauf s'il y a un ORDER BY , il n'y a aucune garantie quant aux valeurs sélectionnées. Vous devriez généralement avoir un ORDER BY pour la prévisibilité.

Il a également été noté que l'utilisation d'un agrégat tel que min() ou max() travaillerait. Bien que cela soit vrai - et conduira à des résultats fiables et prévisibles, contrairement à l'utilisation de DISTINCT ON ou un GROUP BY ambigu - il a un coût de performance en raison de la nécessité d'un tri ou d'une agrégation supplémentaire, et il ne fonctionne que pour les types de données ordinaux.