За последние 24 часа нас посетили 17073 программиста и 1652 робота. Сейчас ищет 951 программист ...

Помогите с составлением запроса, который бы удалял дубликаты (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.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    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.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    @Chushkin, задача:
    --- Добавлено ---
    Честно скажу, в ход мыслей топикстартера я не вчитывался, т.к. привык наблюдать "Ошибку XY" ))) Возможно он и не собирался исправлять бардак, однако я рекомендую это сделать.
    А по ссылке найдется и добавление про уникальный ключ чтобы не допускать дублей в будущем.
     
  5. miketm

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

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

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

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