Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Beseitigen Sie doppelte Zeilen in einer PostgreSQL-SELECT-Anweisung

PostgreSQL erlaubt derzeit kein mehrdeutiges GROUP BY Anweisungen, bei denen die Ergebnisse von der Reihenfolge, in der die Tabelle gescannt wird, dem verwendeten Plan usw. abhängen. So sollte der Standard laut AFAIK funktionieren, aber einige Datenbanken (wie MySQL-Versionen vor 5.7) erlauben lockerere Abfragen, die nur den ersten Wert auswählen gefunden für Elemente, die in SELECT erscheinen Liste, aber nicht in GROUP BY .

In PostgreSQL sollten Sie DISTINCT ON für diese Art von Abfrage.

Sie möchten etwas schreiben wie:

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

(Syntax korrigiert basierend auf Folgekommentar)

Das ist ein bisschen wie ANY_VALUE(...) von MySQL 5.7 Pseudofunktion für group by , aber umgekehrt - es besagt, dass die Werte in distinct on -Klausel muss eindeutig sein, und jeder Wert ist für die Spalten akzeptabel nicht angegeben.

Es sei denn, es gibt einen ORDER BY , gibt es keine Garantie, welche Werte ausgewählt werden. Sie sollten normalerweise einen ORDER BY haben für Vorhersagbarkeit.

Es wurde auch darauf hingewiesen, dass die Verwendung eines Aggregats wie min() oder max() würde funktionieren. Dies ist zwar richtig - und führt im Gegensatz zur Verwendung von DISTINCT ON zu zuverlässigen und vorhersagbaren Ergebnissen oder ein mehrdeutiges GROUP BY - Es hat Leistungseinbußen aufgrund der Notwendigkeit einer zusätzlichen Sortierung oder Aggregation, und es funktioniert nur für ordinale Datentypen.