PostgreSQL staat momenteel geen dubbelzinnige GROUP BY
toe uitspraken waarbij de resultaten afhankelijk zijn van de volgorde waarin de tabel is gescand, het gebruikte plan, enz. Zo zegt de standaard dat het zou moeten werken AFAIK, maar sommige databases (zoals MySQL-versies vóór 5.7) staan lossere zoekopdrachten toe die alleen de eerste waarde kiezen aangetroffen voor elementen die voorkomen in de SELECT
lijst maar niet in GROUP BY
.
In PostgreSQL moet u DISTINCT ON
voor dit soort vragen.
Je wilt iets schrijven als:
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(Syntaxis gecorrigeerd op basis van vervolgopmerking)
Dit lijkt een beetje op MySQL 5.7's ANY_VALUE(...)
pseudo-functie voor group by
, maar omgekeerd - er staat dat de waarden in de distinct on
clausule moet uniek zijn en elke waarde is acceptabel voor de kolommen niet gespecificeerd.
Tenzij er een ORDER BY
. is , is er geen garantie welke waarden zijn geselecteerd. Normaal gesproken heb je een ORDER BY
voor voorspelbaarheid.
Er is ook opgemerkt dat het gebruik van een aggregaat zoals min()
of max()
zou werken. Hoewel dit waar is - en zal leiden tot betrouwbare en voorspelbare resultaten, in tegenstelling tot het gebruik van DISTINCT ON
of een dubbelzinnige GROUP BY
- het heeft prestatiekosten vanwege de behoefte aan extra sortering of aggregatie, en het werkt alleen voor ordinale gegevenstypen.