1
votes

Comment obtenir les ID des lignes en double dans une table

Je souhaite obtenir les ID des lignes du même nom dans une table.

Voici un exemple de ma table, je souhaite récupérer TOUS les identifiants des doublons des noms d'identifiant n ° 1. Voici la valeur des doublons de l'identifiant n ° 1: 1, 3 et 4.

ID |
1  |
3  |
4  |

Voici maintenant ce que je veux avoir:

ID | name  | size
1  | name1 |  12
2  | name3 |  13
3  | name1 |  12
4  | name1 |  12
5  | name3 |  13
6  | name4 |  18

sql

3 commentaires

Les doublons sont-ils basés sur le nom ou le nom et la taille?


Quelle base de données utilisez-vous (par exemple MySQL, SQL Server, Oracle, Postgres, DB2, etc.)?


@GordonLinoff Les tailles semblent être en corrélation avec le nom, auquel cas, la réponse à votre question peut être que cela n'a pas d'importance, mais il n'est peut-être pas non plus faux d'utiliser votre réponse actuelle.


5 Réponses :


2
votes

Une méthode simple utilise exists:

select t.id
from t
where exists (select 1
              from t t2
              where t2.name = t.name and
                    t2.size = t.size and
                    t2.id = 1
             );


0 commentaires

2
votes

Si vous utilisez MySQL, alors GROUP_CONCAT peut être utile ici:

SELECT name, size, GROUP_CONCAT(ID) AS duplicates
FROM yourTable
GROUP BY name, size
HAVING COUNT(*) > 1;

La plupart des bases de données ont un analogue similaire à GROUP_CONCAT dans MySQL.


0 commentaires

0
votes

C'est une méthode plus rapide que Exist

SELECT ID 
FROM table
WHERE name IN
(SELECT name FROM table GROUP BY name HAVING COUNT(*) > 1)

J'espère que cette réponse à votre question


0 commentaires

1
votes
SELECT
    ID, COUNT(*)
FROM
    table_name
GROUP BY
    name, size
HAVING 
    COUNT(*) > 1

0 commentaires

0
votes

La façon dont vous avez rédigé votre réponse est délicate, donc je pense que c'est la requête pour résoudre le problème comme vous l'avez décrit

+----+
| id |
+----+
|  1 |
|  3 |
|  4 |
+----+

le résultat est

select id 
from TABLE b inner join 
     (select name, size from TABLE where id = 1) a 
     on b.name = a.name and 
        b.size = a.size;

J'espère avoir aidé!


0 commentaires