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!