使用来自同一TABLE的DISTINCT SELECTed值更新表

时间:2014-09-27 11:26:58

标签: mysql sql

我有这张桌子

enter image description here

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

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

我试过这个

UPDATE sc_product_phrase
SET attr_id = (
    SELECT DISTINCT
        sc_product_phrase.caption,
        sc_product_phrase.design_phrase_id
    FROM
        `sc_product_phrase` as x
    GROUP BY
        sc_product_phrase.caption
    )

但显示错误

  

[Err] 1093 - 您无法为其指定目标表'sc_product_phrase'   在FROM子句中更新

EDITED

我希望我的TABLE看起来像以下http://sqlfiddle.com/#!2/d65eb/1

注意: - 我不想在那个小提琴中使用那个查询

1 个答案:

答案 0 :(得分:1)

你的SQL小提琴使问题更加清晰。您希望在最后一列中具有相同值的所有行上的最小属性id。您可以使用update / join这样执行此操作:

UPDATE table1 JOIN
       (SELECT `name_en-GB`, min(Attr_Id) as minai
        from table1
        GROUP BY `name_en-GB`
       ) tt
       on table1.`name_en-GB` = tt.`name_en-GB`
   SET attr_id = tt.minai
 WHERE table1.`name_en-GB` IN ('Bride Name', 'Child Grade') AND
       table1.attr_id <> tt.minai;

我不确定您是否需要in部分。您可以通过删除该子句来更新所有这些内容。