我试图基于数据库中的重复项来更新列的值,但是我一直在努力寻找正确的查询。
这是我的数据库结构:
<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值)。
任何帮助表示赞赏!
答案 0 :(得分:2)
对于order_id
和product_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_id
和parent_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 |