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

Тема в разделе "SQL", создана пользователем dronster, 6 дек 2006.

Статус темы:
Закрыта.
  1. dronster

    dronster Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Ключевое слово "Group By"
     
  3. Barmutik

    Barmutik Гость

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

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

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

    dronster Гость

    Большое спасибо, попробую...
     
  5. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Можно еще так, если HAVING поддерживается СУБД:
    Код (Text):
    SELECT Filed1, COUNT(*) AS MyCount FROM YourTable GROUP BY Field1 Having MyCount > 1
     
  6. Barmutik

    Barmutik Гость

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

    dronster Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Значит БД не поддерживает вложенные запросы
     
  9. dronster

    dronster Гость

    БД обычная - FoxPro *.dbf
     
  10. Barmutik

    Barmutik Гость

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

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

    dronster Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--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

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

    dronster Гость

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

    Barmutik Гость

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

    dronster Гость

    Например если поле 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
     
  16. Barmutik

    Barmutik Гость

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

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

    Код (Text):
    SELECT Field1, COUNT(*) AS MyCount FROM MyTable Group By Field1
    Потом в получившемся курсоре фильтруете его уже в TQuery:

    Код (Text):
     Filter := 'MyCount > 1';
    Filtered := True;
    И по идее будет Вам счастье .. если я ещё не запамятовал как с БД работать на Дельфи :)
     
  17. dronster

    dronster Гость

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

    Barmutik Гость

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

    Если бы делать не в ДБФ то вопросов не вызвало бы как сделать .. а вот как в ДБФ ... надо подумать...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей