Нужно сравнить таблицу саму с собой

Тема в разделе "SQL", создана пользователем Leon, 17 июл 2006.

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

    Leon Гость

    Есть такая хорошая команда для удаления дублированных данных Distinct.

    Проблема заключается в следующем, есть таблица в ней куча полей с повторяющимеся данными, необходимо удалить повторы, можно задать Distinct не по всем полям а только по которым нужно, чтобы он просмотрел повторы, а остальные данные (поля) просто вывел на экран как и раньше, но в них не сравнивал данные на повторы ???? Надеюсь я понятно объяснил.... :blink:

    Или может есть какая альтернатива команде Distinct ??? Спасибо за ответы !
     
  2. Barmutik

    Barmutik Гость

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

    Leon Гость

    Блин, что-то я попробовал - не получается, суть вроде понял, а вот как это воплотить вопрос, не подскажете как должен быть построен запрос, жел. для Ms Access, был бы оч. презнателен...
     
  4. Гость

    Может дайте тестовую таблицу, и то, что вы хотите получить.
     
  5. Leon

    Leon Гость

    Да тут без таблицы все просто, есть куча полей, ну например

    1,2,3,4,5,6,7 ... и т.д., в каждом поле встречаются повторяющиеся данные, при выборе команды Distinct нельзя задать, чтобы он в этом поле работал, а в этом нет.. ну допутим нужно профильтровать данную таблицу на совпадение строк, по полям 1,2,3,4 а поля 5,6,7 не проверялись на совпадения но вывелсиь в прежнем состоянии, в котором они были ??
    Эту штуку наверняка можно реализовать как-нибудь с помощью подзапроса обращения таблицы самой к себе, но вот как это записать, вопрос ? :(
     
  6. ooo

    ooo Гость

    1,2,3,4,5,6,7 ... и т.д., в каждом поле встречаются повторяющиеся данные, при выборе команды Distinct нельзя задать, чтобы он в этом поле работал, а в этом нет.. ну допутим нужно профильтровать данную таблицу на совпадение строк, по полям 1,2,3,4 а поля 5,6,7 не проверялись на совпадения но вывелсиь в прежнем состоянии, в котором они были ??
    Эту штуку наверняка можно реализовать как-нибудь с помощью подзапроса обращения таблицы самой к себе, но вот как это записать, вопрос ? :rolleyes:
    [/quote]
    select 1,2,3,4,5,6,7 from tabl t1
    where (1,2,3,4) in (select 1,2,3,4,count(*) from tabl t2
    group by 1,2,3,4
    having count(*)>1)
    order by 1,2,3,4,5
    ;
     
Загрузка...
Статус темы:
Закрыта.

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