• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

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

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Как сделать нижеописанную выборку?

  • Автор темы dronster
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

dronster

Есть таблица. Нужно выбрать те записи, где поле "field1" повторяется более чем 1 раз. Как реализовать? Подскажите ПЛЗ.
 
B

Barmutik

Хммм.. а как в записи могут иметь различное количество полей? В реляционной БД + к этому как может быть нескоьлко полей с одинаковым именем?

ВОт если Вы говорите об одинаковых значения в поле Filed1 то

Код:
SELECT * FROM (SELECT Filed1, COUNT(*) AS MyCount FROM YourTable GROUP BY Field1) A WHERE
A.MyCount > 1
 
E

European

Можно еще так, если HAVING поддерживается СУБД:
Код:
SELECT Filed1, COUNT(*) AS MyCount FROM YourTable GROUP BY Field1 Having MyCount > 1
 
B

Barmutik

По идее HAVING входит в стандарт ANSI 92 так что должны все его поддерживать кто пертендует на поддержку SQL..
 
D

dronster

Хммм.. а как в записи могут иметь различное количество полей? В реляционной БД + к этому как может быть нескоьлко полей с одинаковым именем?

ВОт если Вы говорите об одинаковых значения в поле Filed1 то

Код:
SELECT * FROM (SELECT Filed1, COUNT(*) AS MyCount FROM YourTable GROUP BY Field1) A WHERE
A.MyCount > 1

Я открываю базу в SQL Explorer, простые запросы выполняются, а вот который написал Barmutik - нет...
писал вот так...
Код:
SELECT * FROM (SELECT cod, COUNT(*) AS MyCount FROM zone GROUP BY cod) A WHERE
A.MyCount > 1
 
E

European

Значит БД не поддерживает вложенные запросы
 
B

Barmutik

Значит не судьба .. я проверил .. не работает ... Having кстати тоже не работает ...

А другого варианта я как-то и не могу так сходу представить...
 
D

dronster

Значит не судьба .. я проверил .. не работает ... Having кстати тоже не работает ...

А другого варианта я как-то и не могу так сходу представить...

Хм, ну оччень нужно. Может какую-нить программку простенькую подскажете как написать на Делфи к примеру?
 
E

European

<!--QuoteBegin-dronster+12:12:2006, 21:36 -->
<span class="vbquote">(dronster @ 12:12:2006, 21:36 )</span><!--QuoteEBegin-->БД обычная - FoxPro *.dbf
[snapback]50594" rel="nofollow" target="_blank[/snapback]​
[/quote]
Вот она то и не поддерживает, ни вложенные запросы, ни HAVING, я про это говорил ранее. Советую, если конечно это возможно, сменить БД. Если нет, то реализацию выборки повторяющихся данных надо реализовывать в приложении :p

Эта проблема возникла не первый раз, так что советую пошустрить Гугл и найти решение
 
D

dronster

ну может кто подскажет как реализовать это в приложении?
 
B

Barmutik

Ну тут просто .. получили курсор после выборки с Group BY И дальше уже руками его фиьтранули на предмет поля со значением больше 1 ...
 
D

dronster

Ну тут просто .. получили курсор после выборки с Group BY И дальше уже руками его фиьтранули на предмет поля со значением больше 1 ...

Например если поле field1 содержит следующие значения
1
2
3
3
4
4
5
6
7
7
7
7
8
9
10
10
10

Выборка должна быть такая
3
3
4
4
7
7
7
7
10
10
10
 
B

Barmutik

Давайте по шагам ..

Делаете запрос:

Код:
SELECT Field1, COUNT(*) AS MyCount FROM MyTable Group By Field1

Потом в получившемся курсоре фильтруете его уже в TQuery:

Код:
 Filter := 'MyCount > 1';
Filtered := True;

И по идее будет Вам счастье .. если я ещё не запамятовал как с БД работать на Дельфи :)
 
D

dronster

Давайте по шагам ..

Делаете запрос:

Код:
SELECT Field1, COUNT(*) AS MyCount FROM MyTable Group By Field1

Потом в получившемся курсоре фильтруете его уже в TQuery:

Код:
 Filter := 'MyCount > 1';
Filtered := True;

И по идее будет Вам счастье .. если я ещё не запамятовал как с БД работать на Дельфи :D

Респект тебе Бармутик :) Спасибо огромное
 
B

Barmutik

:D Спасибо конечно .. но я только что увидел что мой варинат не даст результа который вы написали...

Если бы делать не в ДБФ то вопросов не вызвало бы как сделать .. а вот как в ДБФ ... надо подумать...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!