Maison >base de données >tutoriel mysql >Comment sélectionner toutes les colonnes avec DISTINCT dans MySQL ?
MySQL : Comprendre DISTINCT pour sélectionner plusieurs colonnes
Lorsque vous traitez des lignes en double dans des tables MySQL, le mot-clé DISTINCT peut être utilisé pour récupérer des valeurs, mais cela peut également poser des limitations lors de la sélection de plusieurs colonnes. Cet article aborde le problème de la récupération de tous les champs lors de l'utilisation de DISTINCT, ainsi qu'une solution pour sélectionner la dernière entrée pour les lignes en double.
Limitations de DISTINCT pour plusieurs colonnes
DISTINCT n'est pas une fonction qui s'applique uniquement à des colonnes spécifiques. Il s'agit plutôt d'un modificateur de requête qui affecte toutes les colonnes de la liste de sélection. Il supprime les lignes en double où les valeurs de toutes colonnes sont identiques.
Syntaxe correcte pour DISTINCT
DISTINCT doit apparaître immédiatement après SELECT (avec d'autres modificateurs de requête, tels que SQL_CALC_FOUND_ROWS). Après les modificateurs de requête, les noms de colonnes doivent être répertoriés.
Par exemple :
<code class="sql">SELECT DISTINCT foo, ticket_id FROM table...</code>
Cette requête générera une ligne pour chaque paire distincte de valeurs sur ticket_id et foo.
Solution pour sélectionner toutes les colonnes
Il n'est pas possible de sélectionner tous les champs tout en utilisant DISTINCT car cela nécessite que toutes les colonnes soient identiques pour la suppression des doublons. Cependant, il existe une solution de contournement qui peut être utilisée pour sélectionner la dernière entrée pour les lignes en double :
<code class="sql">SELECT t1.* FROM table AS t1 JOIN ( SELECT ticket_id, MAX(row_id) AS max_id FROM table GROUP BY ticket_id ) AS t2 ON t1.ticket_id = t2.ticket_id AND t1.row_id = t2.max_id</code>
Cette requête utilise une sous-requête pour trouver le row_id maximum pour chaque ticket_id, puis rejoint la table principale avec la sous-requête. pour sélectionner la dernière ligne pour chaque ticket_id.
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!