Maison > base de données > tutoriel mysql > Pourquoi \'SELECT DISTINCT\' échoue-t-il avec plusieurs champs dans MySQL ?

Pourquoi \'SELECT DISTINCT\' échoue-t-il avec plusieurs champs dans MySQL ?

Linda Hamilton
Libérer: 2024-11-03 00:30:29
original
384 Les gens l'ont consulté

Why Does

Optimisation MySQL : Comprendre les limitations de "SELECT DISTINCT"

Dans MYSQL, la clause "SELECT DISTINCT" est utilisée pour éliminer les lignes en double en fonction de valeurs de colonne spécifiées. Cependant, il présente certaines restrictions qui peuvent être rencontrées lors de la tentative de sélection de plusieurs champs.

Problème :

Lors de l'utilisation de « SELECT DISTINCT » suivi d'une liste séparée par des virgules de champs et une autre clause "DISTINCT", comme le montre l'exemple suivant, une erreur se produit :

mysql_query("SELECT *, DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")
Copier après la connexion

Explication :

Contrairement à une fonction qui s'applique à des colonnes individuelles, "DISTINCT" est un modificateur de requête qui affecte toutes les colonnes de la liste de sélection . Elle supprime les doublons uniquement lorsque toutes les colonnes de la sélection ont des valeurs identiques.

Par conséquent, la requête tente d'afficher des lignes distinctes en fonction de toutes les colonnes, y compris celles spécifiées dans la liste séparée par des virgules et "ticket_id". Cela crée une ambiguïté, car il n'est pas clair quelles colonnes doivent être prises en compte pour leur unicité.

Solution :

Pour sélectionner tous les champs et éliminer les doublons en fonction de "ticket_id", le la syntaxe correcte est :

SELECT DISTINCT *, ticket_id FROM temp_tickets ORDER BY ticket_id
Copier après la connexion

Cette requête supprimera les doublons en fonction des valeurs combinées de toutes les colonnes, y compris "ticket_id." Cependant, il affichera toujours uniquement la dernière entrée pour chaque valeur unique « ticket_id ». Pour récupérer uniquement les dernières entrées pour toutes les colonnes, une sous-requête peut être utilisée pour sélectionner le ticket_id maximum pour chaque valeur distincte "ticket_id", comme suit :

SELECT * FROM temp_tickets WHERE ticket_id IN (SELECT MAX(ticket_id) FROM temp_tickets GROUP BY ticket_id)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal