Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyeliminuj zduplikowane wiersze w instrukcji PostgreSQL SELECT

PostgreSQL nie zezwala obecnie na niejednoznaczne GROUP BY oświadczenia, w których wyniki są zależne od kolejności skanowania tabeli, używanego planu itp. Tak standard mówi, że powinien działać AFAIK, ale niektóre bazy danych (takie jak wersje MySQL przed 5.7) pozwalają na luźniejsze zapytania, które po prostu wybierają pierwszą wartość napotkano dla elementów pojawiających się w SELECT lista, ale nie w GROUP BY .

W PostgreSQL powinieneś użyć DISTINCT ON dla tego rodzaju zapytania.

Chcesz napisać coś takiego:

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

(Składnia poprawiona na podstawie komentarza uzupełniającego)

To trochę jak ANY_VALUE(...) w MySQL 5.7 pseudofunkcja dla group by , ale na odwrót - mówi, że wartości w distinct on klauzula musi być unikalna, a każda wartość jest akceptowalna dla kolumn nie określone.

Chyba że istnieje ORDER BY , nie ma gwarancji co do wyboru wartości. Zwykle powinieneś mieć ORDER BY dla przewidywalności.

Zauważono również, że użycie agregatu takiego jak min() lub max() pracowałbym. Chociaż to prawda - i doprowadzi do wiarygodnych i przewidywalnych wyników, w przeciwieństwie do użycia DISTINCT ON lub niejednoznaczny GROUP BY - ma koszt wydajności ze względu na potrzebę dodatkowego sortowania lub agregacji i działa tylko dla porządkowych typów danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql:uzyskaj liczbę rekordów między dwiema datami i godzinami

  2. Odwoływanie się do kluczy obcych w tej samej kolumnie

  3. łączenie połączeń php mysql

  4. APACHE Awaria:nadrzędny:proces potomny został zakończony ze statusem 3221225477 -- Ponowne uruchamianie

  5. Synchronizacja baz danych online/offline — MySQL/PHP