Maison >base de données >tutoriel mysql >Comment sélectionner efficacement des lignes distinctes en fonction de plusieurs colonnes dans SQL ?

Comment sélectionner efficacement des lignes distinctes en fonction de plusieurs colonnes dans SQL ?

DDD
DDDoriginal
2025-01-23 05:56:12442parcourir

How to Efficiently Select Distinct Rows Based on Multiple Columns in SQL?

Sélectionnez efficacement des lignes uniques basées sur plusieurs colonnes

Lorsque vous travaillez avec des tables de données, il est souvent nécessaire de récupérer uniquement des lignes uniques en fonction de conditions spécifiques. Dans cet exemple, l'objectif est de sélectionner toutes les lignes du tableau qui ont une combinaison unique de deux colonnes.

L'approche originale consistait à utiliser une combinaison de clauses DISTINCT et IN pour identifier des lignes uniques :

<code class="language-sql">UPDATE sales
SET status = 'ACTIVE'
WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id)
             FROM sales
             HAVING count = 1)</code>

Cependant, une méthode plus efficace et plus fiable consiste à utiliser la clause GROUP BY :

<code class="language-sql">SELECT DISTINCT a,b,c FROM t</code>

Cela équivaut à :

<code class="language-sql">SELECT a,b,c FROM t GROUP BY a,b,c</code>
La clause

GROUP BY regroupe les lignes par colonnes spécifiées (dans ce cas, saleprice et saledate) et élimine les lignes en double. La requête suivante permettra d'obtenir le résultat souhaité :

<code class="language-sql">UPDATE sales
SET status='ACTIVE'
WHERE id IN
(
    SELECT id
    FROM sales S
    INNER JOIN
    (
        SELECT saleprice, saledate
        FROM sales
        GROUP BY saleprice, saledate
        HAVING COUNT(*) = 1 
    ) T
    ON S.saleprice=T.saleprice AND s.saledate=T.saledate
 )</code>

Cette requête identifie les lignes de ventes uniques en fonction de saleprice et saledate et met à jour leur statut sur « ACTIVE ». La sous-requête utilise les clauses GROUP BY et HAVING pour sélectionner des combinaisons uniques de saleprice et saledate.

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!

Déclaration:
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