如何将此SELECT转换为DELETE

时间:2011-10-24 14:48:53

标签: mysql sql select sql-delete

我有一组数据,我基本上需要“清理”

用户将他们最喜欢的Fragrance输入到表单中,并在表单上我自动完成以帮助选择,并希望减少拼写错误,这对于手头的任务至关重要。

例如,以下是我对Paco Rabanne 100万产品的数据 - 但是,我希望他们选择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行< / p>

基本上,我想转向查询,因此它不会显示我不想要的行,但实际上会删除它们。

除非有另一种方法可以解决这个问题吗?

这是表格定义:

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, 

2 个答案:

答案 0 :(得分: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

你的桌子上还有其他字段吗?比如id等?或者只是一个领域?

上面的例子只出现一次,或者每次出现多次?


根据您的代码将数据分成几组,可以得到以下组...

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

注意:我认为您不希望- 1过滤器中有ml。它将100ml变为10

对于第一组,您是否希望删除所有记录并替换为仅Paco Rabanne 1 Million Deodorant的单个记录?或者你想要删除其中2个,并保留其中1个?如果是这样,我们应该如何确定要保留哪个?

对于接下来的三个组,每个组中只有1个记录,但是你已经将0ml切掉了。您想用缩短的版本替换这些记录吗?或者对他们什么都不做?

最后两组每组只有1条记录,过滤器对它们没有任何作用。他们独自留下了吗?


然后,一旦你处理了这个,新的数据会一次又一次地添加吗?您是否需要可以重复运行的代码,或者您是否需要像单次运行那样执行此操作?


不幸的是,如果没有更多信息,我认为我们无法提供太多帮助。

答案 1 :(得分:0)

对我来说,它看起来更像是一个不合适的数据模型:

如果您可以控制存储数据的表数,并且可以随意添加表,最简单的解决方案是使用两个表:一个用于香水,一个用于包装。