Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Elimine linhas duplicadas em uma instrução SELECT do PostgreSQL


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.