我有这张桌子
我想要做的是选择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
注意: - 我不想在那个小提琴中使用那个查询
答案 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
部分。您可以通过删除该子句来更新所有这些内容。