我们的Magento 2存储中有一个表"url_rewrite",我们需要在该表中复制很多值. 我们有一列"store_id",它包含从1到4的值.另一列是"Target_Path",最后一列是"RequestPath".

现在,我们需要将"store_id"中包含值"4"的所有行的"RequestPath"替换为"store_id"2和4行的值,其中"Target_Path"与"store_id"2和4行的值完全相同.

因此,从屏幕截图中,带有"STORE_ID"4的行应该会从带有"STORE_ID"2的行获得类似于"laptops/apple-macbook/apple-macbook-air-2023"的"RequestPath"值.

enter image description here

我们需要为此使用的确切SQL是什么?

推荐答案

以下是使用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

基本上,这会 Select store_id 4(别名u)的行,然后try 与target_pathstore_id 4相同的另一行进行联接.当联接匹配时,查询会将原始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

Mysql相关问答推荐

返回50%的随机结果

MySQL 8.0.28覆盖(和函数)索引未使用

如何有效地计算共同的朋友/追随者?

在MySQL中存储一条帖子的点赞数量

从insert语句获取新生成的虚拟UUID

为什么歌曲详细信息未显示在 Liked.handlebars 视图中?

我可以在姓名和姓名日期之间进行搜索吗?

关于设置为 NOT NULL 时的 CHAR 默认值

如何编写一个查询,计算表中每个日期的一个日期加上前 4 天的记录数?

MySQL UPDATE 锁会因为连续的 SHARE 锁而饿死吗?

基于两个单元格值的 SQL 过滤表

在mysql中将纪元数转换为人类可读的日期

将相同的固定值插入多行

不正确的整数(2147483647)被插入到 MySQL 中?

仅在 MYSQL DATEDIFF 中显示小时数

在 MYSQL 中按枚举字段排序

在 Mac 上设置 Laravel php artisan migrate 错误:没有这样的文件或目录

带有 OuterRef 的简单子查询

判断多个列的一个值

Yii2 如何进行 where AND 或 OR 条件分组?