更新表时出现问题

时间:2014-09-26 19:46:23

标签: mysql sql

我有这张桌子

enter image description here

我想要做的是选择attr_id出现在哪里{DISTINCT name_en-GB,然后选择为attr_id选择name_en-GB的<{1}}

我可以通过编写单个查询来完成此操作,但我想知道有什么方法可以在一个查询中执行此操作吗?

4 个答案:

答案 0 :(得分:1)

你可以做到

UPDATE table1
   SET attr_id = CASE `name_en-GB` WHEN 'Bride Name' THEN 142
                                   WHEN 'Child Grade' THEN 270 END
 WHERE `name_en-GB` IN('Bride Name', 'Child Grade')

这是 SQLFiddle 演示

答案 1 :(得分:0)

您可以使用MySQL过程执行简单的循环。

文档:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

答案 2 :(得分:0)

你只需使用更新查询和选择就可以做到这一点。但是我不知道attr_id第一次出现的标准是什么

假设 - 第一次出现是最小的attr_id

UPDATE table t,
(   SELECT MIN(attr_id), `name_en-GB`
    FROM table
    GROUP BY `name_en-GB`
) t1
SET t.attr_id = t1.attr_id
WHERE t1.`name_en-GB` = t.`name_en-GB`

答案 3 :(得分:0)

我终于完成了这个

   UPDATE sc_product_phrase
    JOIN (
        SELECT
            `caption`,
            min(design_phrase_id) AS minai,
            required
        FROM
            sc_product_phrase WHERE LENGTH(`options`) < 1
        GROUP BY
            `caption`
    ) tt ON sc_product_phrase.`caption` = tt.`caption`
    AND sc_product_phrase.required = tt.required
    SET design_phrase_id = tt.minai
    WHERE
        sc_product_phrase.design_phrase_id <> tt.minai
    AND LENGTH(
        sc_product_phrase.`options`
    ) < 1