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;
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;
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;
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!