За последние 24 часа нас посетили 16649 программистов и 1650 роботов. Сейчас ищут 2054 программиста ...

Помогите с составлением запроса, который бы удалял дубликаты (DISTINCT?)

Тема в разделе "MySQL", создана пользователем miketm, 29 сен 2016.

  1. miketm

    miketm Активный пользователь

    С нами с:
    29 июн 2015
    Сообщения:
    22
    Симпатии:
    0
    Добрый день!
    Подскажите, можно ли составить запрос к таблице (и если да то как). Допустим есть такая таблица:

    CarID Firm Model Color Year Price
    1 Subaru Legacy Red 2003 300000
    2 Subaru Legacy Red 2003 300000
    3 Subaru Legacy Red 2003 300000
    4 Nissan Sunny Blue 2000 190000
    5 Nissan Sunny Blue 2000 190000
    6 Nissan Sunny Blue 2000 190000
    7 Nissan Sunny Blue 2005 220000
    8 Toyouta Camry White 1998 170000
    9 Toyouta Camry White 1998 170000

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

    CarID Firm Model Color Year Price
    1 Subaru Legacy Red 2003 300000
    4 Nissan Sunny Blue 2000 190000
    7 Nissan Sunny Blue 2005 220000
    8 Toyouta Camry White 1998 170000

    т.е. записи с CarId 2,3,5,6,9 надо исключить из результата, так как ВСЕ параметры Firm Model Color Year Price у них совпадают. При этом параметр CarID может отличаться и результаты запроса он ДОЛЖЕН попасть. При этом не важно, какие две записи из трех 1,2,3 и какие две записи из трех 4,5,6 и какая ОДНА запись из двух 8,9 НЕ попадут в выборку, но хотя бы одна должна попасть (например, первая или последняя).

    Можно ли решить эту задачу? Возможно, можно как то использовать DISTINCT, но не пойму как
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    DELETE … WHERE CarId NOT IN( SELECT MIN(CarId) … GROUP BY …)

    http://ru.stackoverflow.com/a/425078/176610

    если создашь песочницу на sqlfiddle, я напишу конкретный ответ
     
  3. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Сегодня что, магнитные бури? :(
    --- Добавлено ---
    Код (Text):
    1. select max(CarID) CarID, Firm, Model, Color, Year, Price
    2. from table
    3. group by Firm, Model, Color, Year, Price
    Так сойдёт?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    @Chushkin, задача:
    --- Добавлено ---
    Честно скажу, в ход мыслей топикстартера я не вчитывался, т.к. привык наблюдать "Ошибку XY" ))) Возможно он и не собирался исправлять бардак, однако я рекомендую это сделать.
    А по ссылке найдется и добавление про уникальный ключ чтобы не допускать дублей в будущем.
     
  5. miketm

    miketm Активный пользователь

    С нами с:
    29 июн 2015
    Сообщения:
    22
    Симпатии:
    0
    Похоже, что решение, предложенное Chushkin вполне рабочее, спасибо. А мысль про "уникальный ключ" я не понимаю как мне поможет, потому как пример таблицы, которую я привел в первом посте, это результат подзапроса, а в оригинальной таблице и с ключами и с уникальными значениями все в порядке. Вот только как написать нужный мне запрос целиком я не придумал. Половину придумал: а вот со второй половиной помог Chushkin. Возможно, можно было бы написать запрос более правильно, но мне пока и так сойдет.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    ну и слава богу! уточнять про "результат подзапроса" уже никто не хочет :)
    --- Добавлено ---
    это же прекрасно, когда у людей всё в порядке. или когда им так кажется.