Maison > base de données > tutoriel mysql > Comment sélectionner des valeurs distinctes dans des colonnes spécifiques tout en conservant toutes les colonnes ?

Comment sélectionner des valeurs distinctes dans des colonnes spécifiques tout en conservant toutes les colonnes ?

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

How to Select Distinct Values from Specific Columns While Keeping All Columns?

Récupération de valeurs de colonne uniques tout en conservant toutes les colonnes

Le défi réside dans la sélection de valeurs uniques dans des colonnes spécifiques (par exemple, field1, field2) tout en conservant toutes les colonnes dans la sortie. Le simple fait d'utiliser SELECT DISTINCT field1, * FROM table n'est pas valide en raison de l'ambiguïté qu'il crée.

Solutions efficaces :

1. L'GROUP BYApproche :

La clause GROUP BY propose une solution :

<code class="language-sql">SELECT *
FROM table
GROUP BY field1;</code>
Copier après la connexion

Cela regroupe les lignes en fonction de valeurs field1 identiques, ce qui donne uniquement des valeurs field1 uniques. Cependant, notez que cette méthode peut conduire à des résultats imprévisibles pour d'autres colonnes à moins qu'elle ne soit explicitement incluse dans l'instruction SELECT et la clause GROUP BY.

2. Tirer parti de DISTINCT ON (spécifique à la base de données) :

Certains systèmes de bases de données (pas tous) prennent en charge DISTINCT ON, permettant une sélection unique sur des colonnes spécifiées tout en conservant toutes les colonnes :

<code class="language-sql">SELECT DISTINCT ON (field1) *
FROM table;</code>
Copier après la connexion

Gardez à l'esprit que le comportement exact de DISTINCT ON peut varier selon les différentes plates-formes de bases de données.

3. Utilisation des fonctions de fenêtre (PostgreSQL, Oracle, T-SQL, etc.) :

Les bases de données prenant en charge les fonctions de fenêtre (comme PostgreSQL, Oracle et T-SQL) fournissent une solution robuste :

<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

Cette approche attribue un numéro de ligne dans chaque partition (définie par field1), ordonnée par field2. Le résultat final n'inclut que les lignes avec row_number = 1, sélectionnant efficacement des valeurs field1 uniques tout en préservant toutes les colonnes.

4. Sous-requêtes et auto-jointures (MySQL, SQLite, etc.) :

Pour les bases de données dépourvues de fonctions de fenêtre (par exemple, MySQL, SQLite), une combinaison de sous-requêtes et d'auto-jointures est une alternative viable :

<code class="language-sql">SELECT t.*
FROM table t
WHERE (field1, field2, ...) IN (
    SELECT DISTINCT (field1, field2, ...)
    FROM table
);</code>
Copier après la connexion

Cela sélectionne les lignes où la combinaison de field1, field2, etc., est unique dans le tableau. N'oubliez pas d'ajuster la liste des colonnes dans la clause IN pour qu'elle corresponde à vos besoins spécifiques.

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