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 :
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>
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.
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>
DISTINCT ON
, une solution plus directe :<code class="language-sql">SELECT DISTINCT ON (field1) * FROM table;</code>
Cela sélectionne uniquement la première ligne pour chaque valeur distincte de field1
.
<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>
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!