Maison  >  Article  >  base de données  >  Comment convertir les requêtes SELECT DISTINCT ON de PostgreSQL en MySQL ?

Comment convertir les requêtes SELECT DISTINCT ON de PostgreSQL en MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-13 15:26:02325parcourir

How to Convert PostgreSQL's SELECT DISTINCT ON Queries to 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn