Выберите, где количество полей больше одного

Я хочу сделать что-то вроде этого:

SELECT * 
  FROM db.table 
 WHERE COUNT(someField) > 1

Как я могу достичь этого в MySql?

Ответ 1

Используйте предложение HAVING, а не WHERE для совокупного сравнения результатов.

Выполнение запроса по номиналу:

SELECT * 
  FROM db.table 
HAVING COUNT(someField) > 1

В идеале должен быть GROUP BY, определенный для правильного оценивания в предложении HAVING, но MySQL разрешает скрытые столбцы из GROUP BY...

Готово ли это к уникальному ограничению на someField? Похоже, это должно быть...

Ответ 2

SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3

Ответ 3

Вы также можете сделать это с помощью самоподключения:

SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk

Ответ 4

Один из способов

SELECT t1.* 
FROM db.table t1
WHERE exists 
      (SELECT *
      FROM db.table t2 
      where t1.pk != t2.pk 
      and t1.someField = t2.someField)

Ответ 5

Как заявил OMG Ponies, предложение о том, что вы после. Однако, если вы надеялись, что вы получите дискретные строки вместо сводки ( "наличие" создает сводку) - это невозможно сделать в одном выражении. В этом случае вы должны использовать два оператора.

Ответ 6

Я приведу пример в группе By между двумя таблицами в 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


Ответ 7

Для меня, не имея группы, просто вернул пустой результат. Так что, я думаю, что наличие группы для утверждения оператора довольно важно

Ответ 8

Ну вот:

SELECT Field1, COUNT(Field1)
  FROM Table1 
 GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc

Ответ 9

Следует также упомянуть, что "pk" должно быть ключевым полем. Самосоединение

SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk 

Билл Карвин дает вам все записи, которые являются дубликатами, которые я хотел. Поскольку некоторые из них имеют более двух, вы можете получить одну и ту же запись более одного раза. Я написал все в другую таблицу с теми же полями, чтобы избавиться от тех же записей при подавлении ключевых полей. Я попробовал

SELECT * FROM db.table HAVING COUNT(someField) > 1

выше. Данные, возвращенные из него, дают только один из дубликатов, менее 1/2 того, что это дает вам, но счет хорош, если это все, что вам нужно.