PostgreSQL nie zezwala obecnie na niejednoznaczne GROUP BY
oświadczenia, w których wyniki są zależne od kolejności skanowania tabeli, używanego planu itp. Tak standard mówi, że powinien działać AFAIK, ale niektóre bazy danych (takie jak wersje MySQL przed 5.7) pozwalają na luźniejsze zapytania, które po prostu wybierają pierwszą wartość napotkano dla elementów pojawiających się w SELECT
lista, ale nie w GROUP BY
.
W PostgreSQL powinieneś użyć DISTINCT ON
dla tego rodzaju zapytania.
Chcesz napisać coś takiego:
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(Składnia poprawiona na podstawie komentarza uzupełniającego)
To trochę jak ANY_VALUE(...)
w MySQL 5.7 pseudofunkcja dla group by
, ale na odwrót - mówi, że wartości w distinct on
klauzula musi być unikalna, a każda wartość jest akceptowalna dla kolumn nie określone.
Chyba że istnieje ORDER BY
, nie ma gwarancji co do wyboru wartości. Zwykle powinieneś mieć ORDER BY
dla przewidywalności.
Zauważono również, że użycie agregatu takiego jak min()
lub max()
pracowałbym. Chociaż to prawda - i doprowadzi do wiarygodnych i przewidywalnych wyników, w przeciwieństwie do użycia DISTINCT ON
lub niejednoznaczny GROUP BY
- ma koszt wydajności ze względu na potrzebę dodatkowego sortowania lub agregacji i działa tylko dla porządkowych typów danych.