PostgreSQL tillåter för närvarande inte tvetydiga GROUP BY
satser där resultaten är beroende av den ordning tabellen skannas, planen som används etc. Det är så standarden säger att det ska fungera AFAIK, men vissa databaser (som MySQL-versioner före 5.7) tillåter lösare frågor som bara väljer det första värdet påträffas för element som visas i SELECT
lista men inte i GROUP BY
.
I PostgreSQL bör du använda DISTINCT ON
för den här typen av fråga.
Du vill skriva något som:
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(Syntax korrigerad baserat på uppföljande kommentar)
Det här är lite som MySQL 5.7:s ANY_VALUE(...)
pseudo-funktion för group by
, men omvänt - det står att värdena i distinct on
sats måste vara unik och alla värden är acceptabelt för kolumnerna inte specificerat.
Såvida det inte finns en ORDER BY
, det finns ingen garanti för vilka värden som väljs. Du bör vanligtvis ha en ORDER BY
för förutsägbarhet.
Det har också noterats att man använder ett aggregat som min()
eller max()
skulle jobba. Även om detta är sant - och kommer att leda till tillförlitliga och förutsägbara resultat, till skillnad från att använda DISTINCT ON
eller en tvetydig GROUP BY
- det har en prestandakostnad på grund av behovet av extra sortering eller aggregering, och det fungerar bara för ordinarie datatyper.