Запрос на уникальность поля

Smoking

Новичок
Запрос на уникальность поля

Всем при!
Нужно сделать запрос который проверит значения поля на уникальность, и выведет строки значения которых повторяються.
 

Smoking

Новичок
неплохо бы пример полный посмотреть, потому-то я сделал запрос, только он выдает результат уже после группировки

а нужно чтобы запрос выдал все строки значения поля в которых не уникально для даной таблицы
 

zerkms

TDD infected
Команда форума
Smoking
неплохо было бы уточнить что конкретно нужно, что есть и что уже пробовалось
 

Smoking

Новичок
нужно: выбрать строки из таблицы где значения конкретного поля повторяеться больше одного раза.
например, есть таблица
| id | value |
| 1 | qwe |
| 2 | sdf |
| 3 | qwe |
результатом запроса должно быть
| id | value |
| 1 | qwe |
| 3 | qwe |
пробовалось:
select *
from table
group by value
having count(value)>1
а также
select *
from table
where value = any (select value
from table
group by value
having count(value) > 1);
последнее либо не работает на старых mysql серверах либо вобще не работает...
 

zerkms

TDD infected
Команда форума
[sql]
SELECT COUNT(*) AS `cnt`, * FROM `table` GROUP BY `value` HAVING `cnt` > 1
[/sql]
 

bkonst

.. хочется странного?...
Re: Запрос на уникальность поля

В качестве странного можно попробовать следующее:
[sql]
SELECT DISTINCT
t1.*
FROM test t1, test t2, test t3
WHERE
t2.id <> t3.id AND
t3.field = t2.field AND
t1.field = t2.field
[/sql]

~
Опечатку поправил... было "t3.field = t3.field AND"
 

Smoking

Новичок
SELECT COUNT( * ) AS `cnt` , *
FROM `table`
GROUP BY `value`
HAVING `cnt` > 1

запрос не работает из-за звёздочки, без неё пашет,
только результат такой же как и у
select *
from table
group by value
having count(value)>1

виндовый mysql 4.0.20
 

zerkms

TDD infected
Команда форума
bkonst
твой статус "...хочется странного..." полностью характеризует твой предыдущий пост
 

bkonst

.. хочется странного?...
zerkms
Между прочим, Smoking просил именно это:
нужно: выбрать строки из таблицы где значения конкретного поля повторяеться больше одного раза.
например, есть таблица
| id | value |
| 1 | qwe |
| 2 | sdf |
| 3 | qwe |
результатом запроса должно быть
| id | value |
| 1 | qwe |
| 3 | qwe |
Ну и статус-то я сам выбирал, зная манеру своих постов ;)

... да, и это, как ни странно - работает ;) ...
 

zerkms

TDD infected
Команда форума
Smoking
поменяй местами вот так:

SELECT * , COUNT( ...

угу, опечатался

-~{}~ 15.06.06 23:49:

упс, пардон, невнимательно прочитал ;)
 

Smoking

Новичок
zerkms
поменял местами. результат такой же как и
select *
from table
group by value
having count(value)>1

он группирует результат по value а этого делать не нужно
результат должен быть - все строки
 

Wicked

Новичок
немного менее странное:

SELECT DISTINCT t1.*
FROM test t1, test t2
WHERE t1.id <> t2.id AND t1.field = t2.field

и рекомендуется сделать индекс по двум полям (test.field, test.id).

-~{}~ 15.06.06 20:45:

zerkms
и сдается мне, что такой "менее странный" вариант (если заработает) будет быстрее, чем count + group by + having :)
 

Smoking

Новичок
очень странно но вроде пашет :)
я щас пытаюсь понять логику....
 

Smoking

Новичок
что за запрос такой ацкий???
я убрал после дистинкт t1. осталась только *
после чего мускул погрузился в длительное раздумье с загрузкой процессора окло 80% и шкрябанькм винта....
 

Wicked

Новичок
Smoking
аццкий? :)

1) дистинкт убирать не надо
2) ты создал индекс, про который я говорил?
 

Smoking

Новичок
1) я дистинкт не убирал, я убрал только t1., получилось SELECT DISTINCT *
2) индекс создавать нет надобности, т.к. запрос часто и переодично использоваться не будет.
 

Wicked

Новичок
Smoking
1) положи на место
2)
после чего мускул погрузился в длительное раздумье с загрузкой процессора окло 80% и шкрябанькм винта....
говорит само за себя.
 
Сверху