PostgreSQL atualmente não permite
GROUP BY
ambíguo instruções onde os resultados dependem da ordem em que a tabela é verificada, o plano usado, etc. É assim que o padrão diz que deve funcionar AFAIK, mas alguns bancos de dados (como versões do MySQL anteriores a 5.7) permitem consultas mais flexíveis que apenas escolhem o primeiro valor encontrado para elementos que aparecem no SELECT
lista, mas não em GROUP BY
. No PostgreSQL, você deve usar
DISTINCT ON
para este tipo de consulta. Você quer escrever algo como:
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(Sintaxe corrigida com base no comentário de acompanhamento)
Isso é um pouco como o
ANY_VALUE(...)
do MySQL 5.7 pseudo-função para group by
, mas ao contrário - diz que os valores no distinct on
cláusula deve ser única e qualquer valor é aceitável para as colunas não Especificadas. A menos que haja um
ORDER BY
, não há garantia quanto aos valores selecionados. Normalmente, você deve ter um ORDER BY
para previsibilidade. Também foi observado que usar um agregado como
min()
ou max()
trabalharia. Embora isso seja verdade - e levará a resultados confiáveis e previsíveis, ao contrário de usar DISTINCT ON
ou um GROUP BY
ambíguo - tem um custo de desempenho devido à necessidade de ordenação ou agregação extra, e só funciona para tipos de dados ordinais.