Cette question est assez simple pour une raison quelconque, je ne peux pas obtenir le résultat approprié pour afficher uniquement les enregistrements en double.
Table : Paypal_ipn_orders
id payer_email
1 [email protected]
2 [email protected]
3 [email protected]
4 [email protected]
5 [email protected]
SELECT id, COUNT( payer_email ) `tot`
FROM Paypal_ipn_orders
GROUP BY payer_email
HAVING `tot` >1
exemple de sortie
id tot
1 2
4 2
production attendue
id payer_email
1 [email protected]
3 [email protected]
4 [email protected]
5 [email protected]
Comment puis-je y arriver?
SELECT id, payer_email
FROM Paypal_ipn_orders
WHERE payer_email IN (
SELECT payer_email
FROM Paypal_ipn_orders
GROUP BY payer_email
HAVING COUNT(id) > 1
)
La IN
était trop lente dans ma situation (180 secondes)
J'ai donc utilisé une JOIN
à la place (0.3 s)
SELECT i.id, i.payer_email
FROM Paypal_ipn_orders i
INNER JOIN (
SELECT payer_email
FROM Paypal_ipn_orders
GROUP BY payer_email
HAVING COUNT( id ) > 1
) j ON i.payer_email=j.payer_email
voici l'exemple simple:
select <duplicate_column_name> from <table_name> group by <duplicate_column_name> having count(*)>=2
Cela fonctionnera vraiment. :)
Obtenez une liste de toutes les lignes en double de la table:
Select * from TABLE1 where PRIMARY_KEY_COLUMN NOT IN ( SELECT PRIMARY_KEY_COLUMN
FROM TABLE1
GROUP BY DUP_COLUMN_NAME having (count(*) >= 1))
utiliser ce code
SELECT *
FROM Paypal_ipn_orders
GROUP BY payer_email
HAVING COUNT( payer_email) >1
Salut ci-dessus réponse ne fonctionnera pas si je veux sélectionner une ou plusieurs valeurs de colonne qui ne sont pas identiques ou peuvent être identiques pour les deux données de ligne
Pour ex. Je veux sélectionner un nom d'utilisateur, date de naissance aussi. Mais dans la base de données est le nom d'utilisateur n'est pas dupliqué mais la date de naissance sera dupliquée alors cette solution ne fonctionnera pas.
Pour cela, utilisez cette solution Nécessité de prendre la même jointure sur la même table /
SELECT
distinct(p1.id), p1.payer_email , p1.username, p1.birth_date
FROM
Paypal_ipn_orders AS p1
INNER JOIN Paypal_ipn_orders AS p2
ON p1.payer_email=p2.payer_email
WHERE
p1.birth_date=p2.birth_date
La requête ci-dessus renverra tous les enregistrements ayant le même email_id et la même date de naissance
Cela fonctionne le plus vite pour moi
SELECT
primary_key
FROM
table_name
WHERE
primary_key NOT IN (
SELECT
primary_key
FROM
table_name
GROUP BY
column_name
HAVING
COUNT(*) = 1
);
SELECT id, payer_email FROM Paypal_ipn_orders
WHERE payer_email IN (
SELECT payer_email FROM papypal_ipn_orders GROUP BY payer_email HAVING COUNT(*) > 1)
Similaire à cette réponse , bien que j'aie utilisé une table temporaire à la place:
CREATE TEMPORARY TABLE duplicates (
SELECT payer_email
FROM Paypal_ipn_orders
GROUP BY payer_email
HAVING COUNT(id) > 1
);
SELECT id, payer_email
FROM Paypal_ipn_orders AS p
INNER JOIN duplicates AS d ON d.payer_email=p.payer_email;
SELECT * FROM `table` t1 join `table` t2 WHERE (t1.name=t2.name) && (t1.id!=t2.id)
Je pense que cette façon est la plus simple. La sortie affiche l'identifiant et l'adresse de messagerie du payeur, qui se trouve dans plusieurs enregistrements de cette table. Les résultats sont triés par identifiant.
SELECT id, payer_email
FROM Paypal_ipn_orders
WHERE COUNT( payer_email )>1
SORT BY id;