Maison > base de données > tutoriel mysql > Comment puis-je récupérer toutes les colonnes d'une requête SQL à l'aide de DISTINCT ?

Comment puis-je récupérer toutes les colonnes d'une requête SQL à l'aide de DISTINCT ?

Patricia Arquette
Libérer: 2025-01-18 20:44:12
original
508 Les gens l'ont consulté

How Can I Retrieve All Columns in a SQL Query Using DISTINCT?

Récupération de toutes les colonnes à l'aide de DISTINCT dans les requêtes SQL

Le mot-clé DISTINCT dans SQL supprime les lignes en double en fonction des colonnes spécifiées. Cependant, obtenir toutes colonnes tout en affichant uniquement des valeurs distinctes dans un sous-ensemble de colonnes nécessite un examen attentif. La simple utilisation de SELECT DISTINCT * n'est pas prise en charge de manière fiable sur tous les systèmes de bases de données.

Solutions pour la récupération complète de colonnes avec DISTINCT

Plusieurs méthodes existent pour y parvenir, en fonction de votre système de base de données spécifique :

  • Fonction ROW_NUMBER() de MySQL : MySQL propose une solution utilisant la fonction de fenêtre ROW_NUMBER() dans une sous-requête :
<code class="language-sql">SELECT *
FROM (
   SELECT *,
          ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS row_number
   FROM table
) AS rows
WHERE row_number = 1;</code>
Copier après la connexion

Cela attribue un numéro de ligne unique au sein de chaque partition (défini par field1), classé par field2. La requête externe sélectionne ensuite uniquement la première ligne de chaque partition. Remplacez field1 et field2 par vos colonnes appropriées.

  • Clause GROUP BY (applicabilité limitée) : La clause GROUP BY peut fonctionner, mais seulement si vous pouvez garantir que toutes les autres colonnes ont la même valeur pour chaque combinaison distincte de colonnes groupées. Ce n'est souvent pas le cas et peut conduire à des résultats imprévisibles.
<code class="language-sql">SELECT *
FROM table
GROUP BY field1;</code>
Copier après la connexion
  • DISTINCT ON (PostgreSQL, Oracle) : PostgreSQL et Oracle fournissent la clause DISTINCT ON, une solution plus directe :
<code class="language-sql">SELECT DISTINCT ON (field1) *
FROM table;</code>
Copier après la connexion

Cela sélectionne uniquement la première ligne pour chaque valeur distincte de field1.

  • Sous-requête jointe (MySQL, SQLite, etc.) : Pour les bases de données dépourvues de fonctions de fenêtre, une auto-jointure avec une sous-requête peut être utilisée (c'est moins efficace) :
<code class="language-sql">SELECT *
FROM table AS t1
INNER JOIN table AS t2
ON t1.field1 = t2.field1
INNER JOIN (SELECT field1, MIN(field2) AS min_field2 FROM table GROUP BY field1) AS distinct_fields
ON t1.field1 = distinct_fields.field1 AND t1.field2 = distinct_fields.min_field2;</code>
Copier après la connexion

Ceci trouve la valeur minimale de field2 pour chaque field1 distinct et la rejoint à la table d'origine. Vous devrez peut-être ajuster la fonction MIN() en fonction du comportement souhaité.

N'oubliez pas de remplacer "table", "field1" et "field2" par les noms réels de vos tables et colonnes. La meilleure approche dépend de votre système de base de données spécifique et du comportement souhaité lorsque plusieurs lignes ont les mêmes valeurs distinctes dans les colonnes spécifiées.

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