Это покажет вам все имена, происходящие несколько раз:
SELECT COUNT(1), Name FROM names GROUP BY name HAVING COUNT(1) > 1
номер 1 не является допустимым запрос. GROUP BY требует, чтобы в запросе была какая-то агрегированная функция, а все остальные столбцы, которые вы не хотите агрегировать, должны быть перечислены в GROUP BY. Часть WHERE ID > 1
просто уволила бы запись с id 1
, но это немного больше.
Номер 2 также не работает. Он просто создал список со всеми учетными записями, указанными дважды в одной строке.
Номер 4 предоставит вам что-то почти идентичное cross join
.
Номер 3 на самом деле сделал бы трюк, хотя и не очень эффективным способом. Он в основном соединяет таблицу сам по себе, используя это имя как оператор JOIN
, а затем использует предложение WHERE n1.id != n2.id
, чтобы гарантировать, что если имя существует более одного раза, оно не будет присоединяться к строке непосредственно. Таким образом, он дает вам список всех повторяющихся имен.
Причина, по которой это не очень эффективно, состоит в том, что если у вас есть одно имя, которое существует десятки раз, вы все равно получите много строк в результате, и вы все равно теперь сможете легко увидеть только имена, которые существуют более одного раза. На миллионной таблице строк также может потребоваться значительное количество времени для выполнения запроса, поскольку в основном вы используете поле символов для JOIN
(что не очень эффективно).
Почему вы не можете просто создать временную таблицу и проверить это самостоятельно? –
Вы можете использовать [SQLFiddle] (http://sqlfiddle.com), чтобы создать свою базу данных «на лету» и протестировать ее. –
Или, возможно, вы должны прочитать учебник. Например: http://www.w3schools.com/sql/ В противном случае ни одно решение не будет идеальным ... Единственное решение, которое покажет дубликаты, будет умножать их на количество повторений. –