Как превратить этот ВЫБОР в УДАЛЕНИЕ

#mysql #sql #select #sql-delete

#mysql #sql #выберите #sql-удалить

Вопрос:

У меня есть набор данных, которые мне в основном нужно «очистить»

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

Например, ниже приведены данные, которые у меня есть для Paco Rabanne 1 Миллион продуктов — однако я хочу, чтобы они выбрали Paco Rabanne 1 миллион, но я не хочу, чтобы у них был выбор различных лосьонов, мыла, дезодоранта и т. Д. И т. Д. Меня Интересует бренд и выбор аромата.

Пример данных, которые у меня есть, показан ниже.

 Paco Rabanne 1 Million Gift Set
Paco Rabanne 1 Million Deodorant Stick 75ml
Paco Rabanne 1 Million Deodorant
Paco Rabanne 1 Million Eau de Toilette
Paco Rabanne 1 Million Gift Set 50ml
Paco Rabanne 1 Million Shower Gel 150ml
Paco Rabanne 1 Million Eau De Toilette Spray 100ml
Paco Rabanne 1 Million After Shave Lotion 100ml
  

У меня есть запрос, который удаляет определенные слова из заголовка элемента и показывает, что осталось

Запрос:

 select DISTINCT( TRIM( LEFT(title, 
        IF( LOCATE('Deodorant', title), LOCATE('Deodorant', title) - 1, 
            IF( LOCATE('Shower', title), LOCATE('Shower', title) - 1, 
                IF( LOCATE('Refillable', title), LOCATE('Refillable', title) - 1,
                    IF( LOCATE('Spray', title), LOCATE('Spray', title) - 1,
                        IF( LOCATE('ml', title), LOCATE('ml', title) - 1,
            999
        )
    )
  )
))))) FROM `PRprod_FRAGRANCES`
  

Это в основном выбирает из таблицы, пропуская любую повторяющуюся строку с дезодорантом в названии или душем и т. Д. И т. Д., Но я хочу постоянно удалять записи вместо того, чтобы запускать этот запрос каждый раз, что дорого, поскольку в таблице более 200 000 строк

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

Если нет другого способа решить эту проблему?

Это определение таблицы:

 field, type, NULL, Key, Default, Extra

autoc_id, int(11), NO, PRI, , auto_increment
title, varchar(128), YES, , , 
genre, varchar(128), YES, , , 
author, varchar(128), YES, , , 
actors, varchar(256), YES, , , 
artist, varchar(128), YES, , , 
main_category, varchar(128), NO, , , 
dateadded, timestamp, NO, , CURRENT_TIMESTAMP, 
  

Комментарии:

1. Самое простое решение — использовать WITH . например WITH results ( <select> ) DELETE FROM results

2. @BradChristie — Не в MySQL это не так. Он не поддерживает /CTEs

3. Д’о. Неправильно прочитал и не распознал MySQL. Мои извинения, я думаю о SQL-сервере

4. @DarrenSweeney — Дайте нам больше информации о таблице и логике, которая вам нужна… Есть ли у записей первичные ключи? Допустим, мы идентифицируем дюжину записей, которые возвращают тот же результат функции, которую вы дали, как нам определить, какую запись удалить? и т.д. и т.п.

5. @Dems Я переписал вопрос, поскольку он был немного запутанным, надеюсь, теперь понятнее.

Ответ №1:

Ваш вопрос все еще немного расплывчатый.

В вашем примере у вас есть данные…

 Paco Rabanne 1 Million Gift Set
Paco Rabanne 1 Million Deodorant Stick 75ml
Paco Rabanne 1 Million Deodorant
Paco Rabanne 1 Million Eau de Toilette
Paco Rabanne 1 Million Gift Set 50ml
Paco Rabanne 1 Million Shower Gel 150ml
Paco Rabanne 1 Million Eau De Toilette Spray 100ml
Paco Rabanne 1 Million After Shave Lotion 100ml
  

Есть ли какие-либо другие поля в вашей таблице? Например, Идентификатор и т. Д.? Или это только одно поле?

И приведенные выше примеры появляются только один раз или они появляются несколько раз каждый?

Разбивка ваших данных на группы на основе вашего кода дает следующие группы…

 Original                                           | After Processing

Paco Rabanne 1 Million Deodorant                   | Paco Rabanne 1 Million
Paco Rabanne 1 Million Deodorant Stick 75ml        | Paco Rabanne 1 Million
Paco Rabanne 1 Million Shower Gel 150ml            | Paco Rabanne 1 Million

Paco Rabanne 1 Million Eau De Toilette Spray 100ml | Paco Rabanne 1 Million Eau De Toilette Spray 10

Paco Rabanne 1 Million Gift Set 50ml               | Paco Rabanne 1 Million Gift Set 5

Paco Rabanne 1 Million After Shave Lotion 100ml    | Paco Rabanne 1 Million After Shave Lotion 10

Paco Rabanne 1 Million Gift Set                    | Paco Rabanne 1 Million Gift Set

Paco Rabanne 1 Million Eau de Toilette             | Paco Rabanne 1 Million Eau de Toilette
  

Примечание: я думаю, вам не нужен a - 1 в ml фильтре. Это превращается 100ml в 10 .

В случае первой группы вы хотите, чтобы все записи были удалены и заменены одной записью, говорящей просто Paco Rabanne 1 Million Deodorant ? Или вы хотите, чтобы 2 из них были удалены, а 1 из них остался? И если да, то как мы должны определить, что сохранить?

В случае следующих трех групп в каждой группе есть только 1 запись, но вы 0ml отрубили конец. Вы хотите заменить эти записи сокращенной версией? Или ничего с ними не делать?

Последние две группы также имеют только по 1 записи в каждой, и фильтр ничего с ними не сделал. Их оставляют в покое?

Затем, как только вы обработаете это, будут ли новые данные добавляться снова и снова? Вам нужен код, который вы можете запускать повторно, или вам нужно сделать это только за один запуск?

К сожалению, без дополнительной информации я не думаю, что мы сможем сильно помочь.

Комментарии:

1. Я знаю, что это беспорядочно, но, боюсь, я мало что могу сделать с набором данных — в идеале я хочу вернуть Пако Рабанну 1 миллион за весь набор, только за одну строку, но не уверен, что это удастся сделать.

2. Изначально это один запуск, но я могу выполнить его как да, новые данные будут появляться периодически, поэтому я знаю, что это всегда будет незавершенная работа

3. Однако первоначальный вопрос все еще остается в силе: возможно ли преобразовать SELECT в оператор DELETE?

4. Мои вопросы все еще остаются в силе. «Изменение выбора на УДАЛЕНИЕ» не является допустимым вопросом. Нам нужно больше знать о таблице… Я спросил, есть ли в таблице поле id. У вас есть полное определение таблицы?

Ответ №2:

Для меня это больше похоже на неадекватную модель данных :

Если у вас есть контроль над количеством таблиц, в которых хранятся данные, и вы можете добавлять таблицы по своему усмотрению, самым чистым решением было бы иметь две таблицы: одну для ароматов, одну для упаковки.

Комментарии:

1. Согласен, но как вы разделяете данные, которые на самом деле являются исходным вопросом .. и да, я согласен, но должен работать с тем, что мне дано