Mysql填充栏"参考"带有特殊格式的字符串

时间:2018-04-05 03:06:13

标签: mysql

我有一个包含四列的表(reference,id_category,id_product,name_category,name)和列" reference"有重复值和空值。

我想用这种格式为空值添加一个字符串:( INITIAL OF CATEGORY NAME)(id类别) - (id product)

例如:A26-548

我想为重复的值添加一个后缀,如下所示:(REFERENCE) - (product_id)

例如:420GF-2045

问题是大多数参考值不会重复,如果是这样,我就不应该修改它们。

这是表的一部分(有超过2000行):

reference   id_category id_product  name_category   name
            26          548         Accesorios      Jarro 200ml
            27          605         Papelillos      OCB Slim
            48          766         Herramientas    Clip LST
420GF       111         2045        420 Genetics    White Widow 100u
420GF       111         2163        420 Genetics    Cbd Blueberry 100u
420GF       111         2164        420 Genetics    Cbd Critical Mass 100u
420GF       111         2165        420 Genetics    Cbd White Widow 100u
420GF21     58          1592        Feminizadas     AMNESIA 4:20 1U
420GF21     58          1628        Feminizadas     AK 47 10U
420GF51     58          1691        Feminizadas     BLUEBERRY 420 10U
420GF51     111         2006        420 Genetics    Jack Herer 100u
420GF51     111         2015        420 Genetics    Mega Pack 100 u
AT01        95          1128        Extracciones    Atomizador
AT01        11          1648        Vaporizadores   ATMOS COMPLETE
BBF26       89          1982        Blimburn Seeds  Sour Diesel 3u
BBF26       89          2068        Blimburn Seeds  Critical Daddy Purple 3u
BSA07       121         1901        Buddha Seeds    Vesta 3u
BSA07       121         2286        Buddha Seeds    Calamity Jane 3u

我想也许我应该将表导出到Excel,进行更改,然后再次导入表。

1 个答案:

答案 0 :(得分:2)

您可以尝试以下更新:

UPDATE yourTable t1
LEFT JOIN
(
    SELECT reference
    FROM yourTable
    GROUP BY reference
    HAVING COUNT(*) > 1
) t2
    ON t1.reference = t2.reference
SET reference = CASE WHEN t1.reference IS NULL
                     THEN CONCAT(LEFT(t1.name_category, 1), t1.id_category, '-', t1.id_product)
                     WHEN t2.reference IS NOT NULL
                     THEN CONCAT(t1.reference, '-', t1.id_product)
                     ELSE t1.reference END;

虽然这可能会回答您的直接问题,但请记住,当您添加新数据时,相同的问题可能会在以后再次出现。您可能想要更改表格设计。