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
5 Réponses :
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
);
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.
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
SELECT
ID, COUNT(*)
FROM
table_name
GROUP BY
name, size
HAVING
COUNT(*) > 1
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é!
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.