根据重复值更新字段

时间:2019-08-12 10:05:52

标签: mysql sql sql-update

我试图基于数据库中的重复项来更新列的值,但是我一直在努力寻找正确的查询。

这是我的数据库结构:

<a style="color: #FFFFFF; border-radius: 0" class="wp-block-button__link" href="https://www.bettervacations.co/properties/5d0a543c7f3381002c0f77ae">BOOK NOW</a>

我想将order_id更新为相同的位置,因为我们同时具有product_id和parent_id的副本。

目前,我发现重复项如下:

id | product_id | order_id | parent_id
--------------------------------------
1        1           1         SMITH1
2        1           2         SMITH1
3        2           3         BLOGGS1
4        2           4         BLOGGS1

但是我现在正在努力将update / join设置为相同的order_id值(最好是最小order_id值)。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

对于order_idproduct_id的每种组合,将表连接到最小值parent_id

update mytable t inner join (
  select product_id, parent_id, min(order_id) order_id
  from mytable
  group by product_id, parent_id
  having min(order_id) <> max(order_id)
) tt on tt.product_id = t.product_id and  tt.parent_id = t.parent_id
set t.order_id = tt.order_id;

在该product_idparent_id只有一个order_id的情况下,此代码将防止任何不必要的更新。
请参见demo
结果:

| id  | product_id | order_id | parent_id |
| --- | ---------- | -------- | --------- |
| 1   | 1          | 1        | SMITH1    |
| 2   | 1          | 1        | SMITH1    |
| 3   | 2          | 3        | BLOGGS1   |
| 4   | 2          | 3        | BLOGGS1   |