MySQL查询查找和替换表中的值

px9o7tmv  于 2023-06-28  发布在  Mysql
关注(0)|答案(1)|浏览(145)

我们有一个表“url_rewrite”在我们的Magento 2商店,我们需要复制这个表里面的很多值。我们有一个列“store_id”,它包含从1到4的值。另一列为“target_path”,最后一列为“request_path”。
现在,我们需要将所有在“store_id”中包含值“4”的行的“request_path”替换为“store_id”2和4的行的“target_path”。
因此,从屏幕截图中,具有“store_id”4的行应该从具有“store_id”2的行获得“request_path”值,如“laptops/apple-macbook/apple-macbook-air-2023”。

我们需要使用什么样的sql来完成这个任务?

ni65a41a

ni65a41a1#

下面是使用update/join语法的一种方法:

update url_rewrite u
inner join url_rewrite u1 on u1.target_path = u.target_path
set u.request_path = u1.request_path
where u.store_id = 4 and u1.store_id = 2

基本上,这会选择具有store_id 4(别名u)的行,然后尝试与具有相同target_pathstore_id 4的另一行连接。当连接匹配时,查询将原始request_path更新为匹配行的request_path
如果你想要一个select而不是update,我们可能会使用窗口函数而不是自连接:

select entity_id, 
    case 
        when store_id = 4 then coalesce(new_request_path, request_path) 
        else request_path 
     end as request_path,
    target_path, redirect_type, store_id
from (
    select u.*,
        max(case when store_id = 2 then request_path end) 
            over(partition by request_path) as new_request_path
    from url_rewrite
) u

相关问题