Je veux faire quelque chose comme ça:
SELECT *
FROM db.table
WHERE COUNT(someField) > 1
Comment puis-je y parvenir dans MySql?
Utilisez la clause HAVING
, not WHERE
, pour la comparaison des résultats agrégés.
Prendre la requête à sa valeur nominale:
SELECT *
FROM db.table
HAVING COUNT(someField) > 1
Idéalement, il devrait y avoir une valeur GROUP BY
définie pour une évaluation correcte dans la HAVING
clause, mais MySQL autorise les colonnes cachées de GROUP BY ...
Est-ce en préparation pour une contrainte unique sur someField
? On dirait que ça devrait être ...
GROUP BY
surement (à moins que ce ne soit quelque chose de non standard MySQL)?someField
valeurs non nulles ou un jeu de résultats vide si ce n'est pas le cas.la source
Vous pouvez également le faire avec une auto-jointure:
la source
Voici:
la source
Une manière
la source
Comme l'a déclaré OMG Ponies, la clause ayant est ce que vous recherchez. Cependant, si vous espériez obtenir des lignes discrètes au lieu d'un résumé (le "ayant" crée un résumé), cela ne peut pas être fait en une seule instruction. Vous devez utiliser deux instructions dans ce cas.
la source
Je donne un exemple sur Group By entre deux tables dans Sql:
Select cn.name,ct.name,count(ct.id) totalcity from city ct left join country cn on ct.countryid = cn.id Group By cn.name,ct.name Having totalcity > 2
la source
Pour moi, ne pas avoir de groupe vient de renvoyer un résultat vide. Donc, je suppose qu'avoir un groupe pour avoir une déclaration est assez important
la source
Il convient également de mentionner que le "pk" doit être un champ clé. L'auto-jointure
par Bill Karwin vous donne tous les disques qui sont des doublons et c'est ce que je voulais. Comme certains en ont plus de deux, vous pouvez obtenir le même enregistrement plusieurs fois. J'ai tout écrit dans une autre table avec les mêmes champs pour me débarrasser des mêmes enregistrements par suppression des champs clés. j'ai essayé
SELECT * FROM db.table HAVING COUNT(someField) > 1
ci-dessus en premier. Les données renvoyées ne donnent qu'un seul des doublons, moins de la moitié de ce que cela vous donne, mais le décompte est bon si c'est tout ce que vous voulez.
la source