他の場所のコメントで、「マスター」lang_idは常に1であると述べました。これにより、物事が大幅に簡素化され、単純な自己結合でこれを行うことができます(サブクエリなし:-)
このクエリは、すべての lang_1 行を選択し、それらを同じ prod_id のすべての非 lang_1 行と結合して更新します。
Lang_ID=1 が常に「最初」の場合
UPDATE products
LEFT JOIN products as duplicates
ON products.Prod_ID=duplicates.Prod_ID
AND duplicates.Lang_ID != 1
SET duplicates.Descr = products.Descr
WHERE products.Lang_ID = 1
編集: Lang_ID=1 が「最初」ではない場合
その行の最小の Lang_ID を見つける中間結合を介して、テーブルをそれ自体に結合できます。中間結合を「lang_finder」と呼びました。
UPDATE products
LEFT JOIN (SELECT Prod_ID, MIN(Lang_ID) as Lang_ID FROM products GROUP BY Prod_ID) as lang_finder
ON products.prod_id=lang_finder.prod_id
LEFT JOIN products as cannonical_lang
ON products.Prod_ID = cannonical_lang.Prod_ID
AND lang_finder.Lang_ID = cannonical_lang.Lang_ID
SET products.Descr = cannonical_lang.Descr
サブクエリを使用していますが、ネストしていないことに注意してください。サブクエリは基本的に、最も低い Lang_ID の値を持つ列を products テーブルに (仮想的に) 追加するだけであり、これにより自己結合がそれに一致するようになります。そのため、Lang_ID 3、4、および 5 の製品があった場合、これらすべての Descr が Lang_ID 3 に設定されたものに設定されます。