Heim > Datenbank > MySQL-Tutorial > Wie repliziere ich Postgresqls SELECT DISTINCT ON in MySQL?

Wie repliziere ich Postgresqls SELECT DISTINCT ON in MySQL?

Barbara Streisand
Freigeben: 2024-11-08 16:59:02
Original
1088 Leute haben es durchsucht

How to Replicate Postgresql's SELECT DISTINCT ON in MySQL?

Konvertieren von SELECT DISTINCT ON von Postgresql in MySQL

Bei der Migration von Postgresql zu MySQL kann es erforderlich sein, Abfragen mithilfe von SELECT DISTINCT von Postgresql zu konvertieren ON-Anweisung zu ihrem MySQL Äquivalente.

SELECT DISTINCT ON von Postgresql

In Postgresql wird SELECT DISTINCT ON verwendet, um doppelte Zeilen basierend auf der eindeutigen Kombination angegebener Spalten zu entfernen. Es eliminiert alle übereinstimmenden Zeilen und behält nur die „erste“ Zeile für jede eindeutige Kombination bei.

MySQL-Erweiterung für GROUP BY

MySQL hat kein genaues Gegenstück zu SELECT UNTERSCHIEDLICH AN. Stattdessen wird eine Erweiterung von GROUP BY verwendet, die die Auswahl nicht aggregierter Spalten ermöglicht, auch wenn diese nicht in der GROUP BY-Klausel benannt sind. Allerdings ist die Wahl des Wertes aus jeder Gruppe unvorhersehbar. Daher können wir möglicherweise GROUP BY in MySQL verwenden, um einen ähnlichen Effekt zu erzielen:

SELECT col4, col5
FROM tablename
GROUP BY col1, col2, col3;
Nach dem Login kopieren

Diese Abfrage gibt die „erste“ Zeile für jede (col1, col2, col3)-Kombination zurück, aber die spezifische Reihenfolge von Diese Zeilen sind unbestimmt.

Reihenreihenfolge beibehalten

Um die Reihenfolge der zurückgegebenen Zeilen anzugeben, Wir können eine Unterabfrage verwenden:

SELECT col4, col5
FROM (
  SELECT col1, col2, col3, col4, col5
  FROM tablename
  ORDER BY col1, col2, col3, col4
) s
GROUP BY col1, col2, col3;
Nach dem Login kopieren

Obwohl dieser Ansatz logisch erscheint, liegt es bei MySQL immer noch im Ermessen, einen beliebigen Wert für col4 und col5 auszuwählen. Um die erwartete Zeilenreihenfolge sicherzustellen, benötigen wir eine komplexere Abfrage:

SELECT t1.col4, t1.col5
FROM tablename t1 INNER JOIN (
  SELECT col1, col2, col3, MIN(col4) as m_col4
  FROM tablename
  GROUP BY col1, col2, col3) s
     ON t1.col1=s.col1
        AND t1.col2=s.col2
        AND t1.col3=s.col3
        AND t1.col4=s.m_col4
GROUP BY
  t1.col1, t1.col2, t1.col3, t1.col4;
Nach dem Login kopieren

Fazit

Während es keine direkte Übersetzung von Postgresqls SELECT DISTINCT ON in MySQL gibt, Problemumgehungen mit GROUP BY und Unterabfragen bieten die gewünschte Funktionalität. Die resultierenden MySQL-Abfragen können jedoch komplexer sein als ihre Postgresql-Gegenstücke.

Das obige ist der detaillierte Inhalt vonWie repliziere ich Postgresqls SELECT DISTINCT ON in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage