Maison > Article > base de données > Quatre utilisations du mot-clé distinct dans SQL
Ce que cet article vous apporte concerne les quatre utilisations (exemples de code) du mot-clé distinct dans SQL. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Lorsque vous utilisez MySQL, vous devez parfois rechercher des enregistrements avec des champs uniques. Bien que MySQL fournisse le mot-clé distinct pour filtrer les enregistrements en double redondants et n'en conserver qu'un, il est souvent utilisé pour renvoyer le nombre d'enregistrements uniques. dupliquez les enregistrements au lieu de l'utiliser pour renvoyer toutes les valeurs sans enregistrements en double. La raison en est que distinct ne peut renvoyer que son champ cible, mais ne peut pas renvoyer d'autres champs. Ce problème me dérange depuis longtemps. S'il ne peut pas être résolu avec distinct, je ne peux le résoudre qu'avec une requête à double boucle, ce qui est très. grand pour une grande quantité de données, pour le site Web, cela affectera sans aucun doute directement l'efficacité. J'ai donc passé beaucoup de temps à rechercher ce problème et je n'ai pas trouvé de solution en ligne. Pendant cette période, j'ai fait appel à Rong Rong pour m'aider. En conséquence, nous étions tous les deux déprimés
Jetons un coup d'œil. à un exemple d'abord :
table
id nom
1 a
2 b
3 c
4 c
5 b
La structure de la bibliothèque est à peu près la suivante. Ceci n'est qu'un exemple simple, et la situation réelle sera beaucoup plus compliquée.
Par exemple, si je souhaite utiliser une seule instruction pour interroger toutes les données dont les noms ne sont pas en double, je dois utiliser distinct pour supprimer les enregistrements en double redondants.
select distinct name from table
Le résultat obtenu est :
nom
a
b
c
semble être réalisé Cela a fonctionné, mais ce que je veux obtenir, c'est la valeur id ? Modifiez l'instruction de requête :
select distinct name, id from table
Le résultat sera :
id name
1 a
2 b
3 c
4 c
5 b
distinct Pourquoi ça ne marche pas ? Cela fonctionne, mais cela affecte deux champs en même temps, c'est-à-dire que l'identifiant et le nom doivent être identiques pour être exclus. . . . . . .
Modifions l'instruction de requête :
select id, distinct name from table
Malheureusement, vous ne pouvez rien obtenir à part les informations d'erreur, distinct doit être placé au début . Est-il si difficile de distinguer la condition où ? Oui, il signale toujours une erreur. . . . . . .
N'est-ce pas gênant ? En effet, tous les efforts n’ont pas réussi à résoudre ce problème. Je n'ai pas d'autre choix que de continuer à demander à quelqu'un.
J'ai contacté un programmeur JAVA dans l'entreprise et il m'a montré comment utiliser distinct dans Oracle, mais il n'a pas trouvé de solution dans MySQL. Finalement, avant de quitter le travail, il m'a suggéré d'essayer le groupe. par.
Après avoir essayé pendant longtemps, cela n'a pas fonctionné. Finalement, j'ai trouvé une utilisation dans le manuel mysql. J'ai utilisé group_concat(distinct name) avec group by name pour obtenir la fonction dont j'avais besoin. Je suis excité, que Dieu me bénisse, je vais essayer dès que possible.
Signaler une erreur. . . . . . . . . . . . déprimé. . . . . . . Même le manuel MySQL ne m'acceptait pas. Cela m'a d'abord donné de l'espoir, puis m'a poussé au désespoir. . . .
Vérifiez encore, la fonction group_concat est supportée par 4.1, halo, je suis 4.0. Il n'y a pas d'autre moyen, mettez à niveau, essayez après la mise à niveau, succès. . . . . .
Enfin c'est fait, mais nous devons maintenant demander aux clients de mettre également à niveau leur version.
Soudain, une idée a surgi. Puisque la fonction group_concat peut être utilisée, d'autres fonctions peuvent-elles également fonctionner ?
Dépêchez-vous d'essayer la fonction count, ça marche, moi. . . . . . . J'ai envie de pleurer, ça m'a demandé tellement d'efforts. . . . . . . . Il s'avère que c'est aussi simple que cela. . . . . .
Publiez maintenant la déclaration complète :
select *, count(distinct name) from table group by name
Résultat :
nombre de noms d'identifiant (nom distinct)
1 a 1
2b1
3c1
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!