Maison > Article > base de données > Comment convertir les requêtes SELECT DISTINCT ON de PostgreSQL en MySQL ?
Conversion des requêtes DISTINCT ON de PostgreSQL vers MySQL
Lors de la transition de PostgreSQL vers MySQL, les utilisateurs peuvent rencontrer une différence dans la syntaxe pour éliminer dupliquer les lignes en fonction de valeurs de colonne spécifiques. PostgreSQL utilise l'instruction SELECT DISTINCT ON, tandis que MySQL utilise une extension de la clause GROUP BY.
SELECT DISTINCT ON de PostgreSQL
Le SELECT DISTINCT ON (col1, col2, col3) dans PostgreSQL conserve la première ligne qualifiante pour chaque combinaison unique des colonnes spécifiées. Par exemple, considérons le tableau suivant :
col1 | col2 | col3 | col4 | col5 |
---|---|---|---|---|
1 | 2 | 3 | 777 | 888 |
1 | 2 | 3 | 888 | 999 |
3 | 3 | 3 | 555 | 555 |
La requête affichera :
col4 | col5 |
---|---|
777 | 888 |
555 | 555 |
Extension de MySQL à GROUP BY
Extension de MySQL permet la sélection de colonnes non agrégées même si elles ne sont pas incluses dans la clause GROUP BY. Cependant, le serveur a la liberté de choisir des valeurs arbitraires dans ces colonnes pour chaque groupe.
Requête MySQL équivalente
La requête MySQL équivalente pour l'exemple PostgreSQL est :
SELECT col4, col5 FROM tablename GROUP BY col1, col2, col3;
PostgreSQL et MySQL renverront une ligne pour chaque combinaison (col1, col2, col3), mais la ligne spécifique renvoyée peut varier en raison de l'absence d'ordre explicite.
Solution de contournement pour les requêtes ordonnées
Pour imiter le comportement DISTINCT ON ordonné de PostgreSQL, une requête plus complexe dans MySQL est requise :
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;
Conclusion
Bien que MySQL n'ait pas d'équivalent exact pour SELECT DISTINCT ON de Postgresql, les solutions de contournement impliquant l'extension GROUP BY peuvent fournir des fonctionnalités similaires. La complexité de la solution de contournement peut varier en fonction des exigences de la requête.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!