Heim >Datenbank >MySQL-Tutorial >Wie konvertiert man SELECT DISTINCT ON-Abfragen von PostgreSQL in MySQL?

Wie konvertiert man SELECT DISTINCT ON-Abfragen von PostgreSQL in MySQL?

Barbara Streisand
Barbara StreisandOriginal
2024-11-13 15:26:02390Durchsuche

How to Convert PostgreSQL's SELECT DISTINCT ON Queries to MySQL?

Konvertieren von DISTINCT ON-Abfragen von PostgreSQL nach MySQL

Beim Übergang von PostgreSQL zu MySQL stoßen Benutzer möglicherweise auf einen Unterschied in der Syntax für die Eliminierung Duplizieren Sie Zeilen basierend auf bestimmten Spaltenwerten. PostgreSQL verwendet die SELECT DISTINCT ON-Anweisung, während MySQL eine Erweiterung der GROUP BY-Klausel verwendet.

SELECT DISTINCT ON von PostgreSQL

Die SELECT DISTINCT ON (col1, col2, col3)-Abfrage in PostgreSQL behält die erste qualifizierende Zeile für jede eindeutige Kombination der angegebenen Spalten bei. Betrachten Sie beispielsweise die folgende Tabelle:

col1 col2 col3 col4 col5
1 2 3 777 888
1 2 3 888 999
3 3 3 555 555

Die Abfrage gibt Folgendes aus:

col4 col5
777 888
555 555

MySQL-Erweiterung für GROUP BY

MySQL-Erweiterung ermöglicht die Auswahl nicht aggregierter Spalten, auch wenn diese nicht in der GROUP BY-Klausel enthalten sind. Der Server hat jedoch die Freiheit, für jede Gruppe beliebige Werte aus diesen Spalten auszuwählen.

Äquivalente MySQL-Abfrage

Die äquivalente MySQL-Abfrage für das PostgreSQL-Beispiel lautet:

SELECT col4, col5
FROM tablename
GROUP BY col1, col2, col3;

Sowohl PostgreSQL als auch MySQL geben für jede Kombination (col1, col2, col3) eine Zeile zurück, es wird jedoch die spezifische Zeile zurückgegeben kann aufgrund des Fehlens einer expliziten Reihenfolge variieren.

Problemumgehung für geordnete Abfragen

Um das geordnete DISTINCT ON-Verhalten von PostgreSQL nachzuahmen, ist eine komplexere Abfrage in MySQL erforderlich:

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;

Fazit

Während MySQL dies tut Da es kein genaues Gegenstück zu SELECT DISTINCT ON von Postgresql gibt, können Problemumgehungen mit der GROUP BY-Erweiterung ähnliche Funktionen bieten. Die Komplexität der Problemumgehung kann je nach Abfrageanforderungen variieren.

Das obige ist der detaillierte Inhalt vonWie konvertiert man SELECT DISTINCT ON-Abfragen von PostgreSQL in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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