sql >> Base de Datos >  >> RDS >> Mysql

Eliminar filas duplicadas en una declaración SELECT de PostgreSQL

PostgreSQL actualmente no permite GROUP BY ambiguo declaraciones donde los resultados dependen del orden en que se escanea la tabla, el plan utilizado, etc. Así es como el estándar dice que debería funcionar AFAIK, pero algunas bases de datos (como las versiones de MySQL anteriores a 5.7) permiten consultas más flexibles que solo eligen el primer valor encontrado para los elementos que aparecen en el SELECT lista pero no en GROUP BY .

En PostgreSQL, debe usar DISTINCT ON para este tipo de consultas.

Quieres escribir algo como:

SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author 
left join anwendung on anwendung.name = autor.anwendung;

(Sintaxis corregida en base al comentario de seguimiento)

Esto es un poco como ANY_VALUE(...) de MySQL 5.7 pseudo-función para group by , pero al revés:dice que los valores en distinct on la cláusula debe ser única, y cualquier valor es aceptable para las columnas no especificado.

A menos que haya un ORDER BY , no hay garantía de qué valores se seleccionan. Por lo general, debe tener un ORDER BY para la previsibilidad.

También se ha observado que usar un agregado como min() o max() trabajaría. Si bien esto es cierto, y conducirá a resultados confiables y predecibles, a diferencia de usar DISTINCT ON o un ambiguo GROUP BY - tiene un costo de rendimiento debido a la necesidad de clasificación o agregación adicional, y solo funciona para tipos de datos ordinales.