sql >> Database >  >> RDS >> Mysql

Verwijder dubbele rijen in een PostgreSQL SELECT-instructie

PostgreSQL staat momenteel geen dubbelzinnige GROUP BY toe uitspraken waarbij de resultaten afhankelijk zijn van de volgorde waarin de tabel is gescand, het gebruikte plan, enz. Zo zegt de standaard dat het zou moeten werken AFAIK, maar sommige databases (zoals MySQL-versies vóór 5.7) staan ​​lossere zoekopdrachten toe die alleen de eerste waarde kiezen aangetroffen voor elementen die voorkomen in de SELECT lijst maar niet in GROUP BY .

In PostgreSQL moet u DISTINCT ON voor dit soort vragen.

Je wilt iets schrijven als:

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

(Syntaxis gecorrigeerd op basis van vervolgopmerking)

Dit lijkt een beetje op MySQL 5.7's ANY_VALUE(...) pseudo-functie voor group by , maar omgekeerd - er staat dat de waarden in de distinct on clausule moet uniek zijn en elke waarde is acceptabel voor de kolommen niet gespecificeerd.

Tenzij er een ORDER BY . is , is er geen garantie welke waarden zijn geselecteerd. Normaal gesproken heb je een ORDER BY voor voorspelbaarheid.

Er is ook opgemerkt dat het gebruik van een aggregaat zoals min() of max() zou werken. Hoewel dit waar is - en zal leiden tot betrouwbare en voorspelbare resultaten, in tegenstelling tot het gebruik van DISTINCT ON of een dubbelzinnige GROUP BY - het heeft prestatiekosten vanwege de behoefte aan extra sortering of aggregatie, en het werkt alleen voor ordinale gegevenstypen.



  1. Hoe SQLite-query asynchroon uit te voeren op achtergrondthread?

  2. Oracle Linked Server maken en configureren in SQL Server

  3. Controleren of een T-SQL UDF schemagebonden is (zelfs als het versleuteld is)

  4. MySQL - Supertype/Subtype-ontwerp