Respostas:
Use a cláusula HAVING, not WHERE, para comparação de resultados agregados.
Tomando a consulta pelo valor de face:
SELECT *
FROM db.table
HAVING COUNT(someField) > 1
Idealmente, deve haver um GROUP BYdefinido para a avaliação adequada na HAVINGcláusula, mas o MySQL não permite colunas ocultas do GROUP BY ...
Isso está em preparação para uma restrição exclusiva someField? Parece que deveria ser ...
someFieldvalores não nulos ou um conjunto de resultados vazio se não contiver .
SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3
Você também pode fazer isso com uma autojunção:
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
Aqui está:
SELECT Field1, COUNT(Field1)
FROM Table1
GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc
Mão única
SELECT t1.*
FROM db.table t1
WHERE exists
(SELECT *
FROM db.table t2
where t1.pk != t2.pk
and t1.someField = t2.someField)
Como OMG Ponies afirmou, a cláusula de ter é o que você está depois. No entanto, se você esperava obter linhas discretas em vez de um resumo (o "ter" cria um resumo) - isso não pode ser feito em uma única instrução. Você deve usar duas instruções nesse caso.
Dou um exemplo no Group By entre duas tabelas no 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
Para mim, não ter um grupo por apenas retornou resultado vazio. Então eu acho que ter um grupo para a declaração de ter é muito importante
Também deve ser mencionado que o "pk" deve ser um campo chave. A auto-adesão
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
por Bill Karwin dar-lhe todos os registros que são duplicados que é o que eu queria. Como alguns têm mais de dois, você pode obter o mesmo registro mais de uma vez. Eu escrevi tudo em outra tabela com os mesmos campos para me livrar dos mesmos registros por supressão de campos-chave. eu tentei
SELECT * FROM db.table HAVING COUNT(someField) > 1
acima primeiro. Os dados retornados fornecem apenas uma das duplicatas, menos da metade do que isso fornece, mas a contagem é boa se isso for tudo o que você deseja.
GROUP BYcerteza (a menos que seja alguma coisa não padrão do MySQL)?