重置一列中所有值,除了一个

时间:2018-11-06 11:48:57

标签: mysql

这是我的查询,向我返回表gtin中表gtin的{​​{1}}的计数。

artikel

现在,我想重设表 SELECT g.gtin, Count(a.gtin) FROM artikel a JOIN gtin g where a.gtin IN (g.gtin) GROUP BY a.gtin HAVING count(a.gtin) > 1 中除一个以外的所有gtins。哪一个都没关系。最后,表artikel中的每个gtin在列gtin的表artikel中仅应使用一次。

1 个答案:

答案 0 :(得分:1)

我认为您要确保在表artikel中没有重复的gtin值,并且这与对表gtin的引用无关。

如果您使用的是MySQL 8.0,则可以使用窗口函数轻松实现。像

update artikel set gtin = null
where row_number() over (partition by gtin) > 1

尚未测试,因此可能存在语法错误。

编辑:如果您的MySQL版本较低,则可以使用artikel_id之类的一些区别属性从每个组中选择一行以保留其值:

update artikel as a
join ( select gtin, min(artikel_id) as chosen_id
       from artikel group by gtin ) as b
    on b.gtin = a.gtin and a.artikel_id <> b.chosen_id
set a.gtin = null;