Mysql
 sql >> база данни >  >> RDS >> Mysql

Елиминирайте дублиращи се редове в PostgreSQL оператор SELECT

PostgreSQL в момента не позволява двусмислени GROUP BY изрази, при които резултатите зависят от реда, в който таблицата се сканира, използвания план и т.н. Ето как стандартът казва, че трябва да работи AFAIK, но някои бази данни (като версии на MySQL преди 5.7) позволяват по-свободни заявки, които просто избират първата стойност се среща за елементи, появяващи се в SELECT списък, но не в GROUP BY .

В PostgreSQL трябва да използвате DISTINCT ON за този вид заявка.

Искате да напишете нещо като:

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

(Коригиран синтаксис въз основа на последващ коментар)

Това е малко като ANY_VALUE(...) на MySQL 5.7 псевдофункция за group by , но в обратна посока - пише, че стойностите в distinct on клаузата трябва да е уникална и всяка стойност е приемлива за колоните не посочено.

Освен ако няма ORDER BY , няма гаранция кои стойности са избрани. Обикновено трябва да имате ORDER BY за предвидимост.

Също така беше отбелязано, че се използва агрегат като min() или max() бих работил. Въпреки че това е вярно - и ще доведе до надеждни и предвидими резултати, за разлика от използването на DISTINCT ON или двусмислена GROUP BY - има разходи за производителност поради необходимостта от допълнително сортиране или агрегиране и работи само за редовни типове данни.



  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 изтриване в безопасен режим

  2. SQL CREATE TABLE Синтаксис – Изброени от СУБД

  3. Променете MySQL таблицата, за да добавите коментари към колони

  4. Как да създадете управлявано от база данни многостепенно навигационно меню с помощта на Laravel

  5. node.js mysql грешка:ECONNREFUSED