从 wp_usermeta table 更新 'meta_value' 分配相同 table 的另一个 'meta_value' 的值

Update 'meta_value' from wp_usermeta table assigning value of another 'meta_value' of the same table

对于令人困惑和繁琐的问题,我深表歉意,但无论如何我需要执行以下操作:在 'wp_usermeta' table 中,我有字段 (meta_keys) 'category' 和 'request_category' 对于所有用户。现在我想用 meta_value 'request_category' 覆盖 'category' 的 meta_value,其中 'category' 具有特定值。

但是在执行 SQL 查询后,我在 'category' 的 'meta_value' 字段中得到 NULL。这是我的代码:

UPDATE 
  wp_usermeta
SET
  wp_usermeta.meta_value = 
  (SELECT 
    umeta_tmp.meta_value 
  FROM
    umeta_tmp
  WHERE umeta_tmp.meta_key = 'request_category' 
    AND umeta_tmp.umeta_id = wp_usermeta.umeta_id) 
WHERE wp_usermeta.meta_key = 'category' 
  AND wp_usermeta.meta_value = 'travel_agency'    

其中 table 'umeta_tmp' 是一个临时的 table 我在其中保存了 'wp_usermeta' table 的数据(因为我无法修改相同的 table,我在 SELECT 部分使用)。

任何人都可以提示我如何实现这一点。 谢谢。

通过 JOIN 转换为 UPDATE

UPDATE wp_usermeta
JOIN umeta_tmp ON umeta_tmp.meta_key = 'request_category' 
               AND umeta_tmp.umeta_id = wp_usermeta.umeta_id
SET wp_usermeta.meta_value = umeta_tmp.meta_value
WHERE wp_usermeta.meta_key = 'category' AND 
      wp_usermeta.meta_value = 'travel_agency'`

如果 umeta_tmp table 只是 wp_usermeta table 的副本,那么 JOINWHERE 条件是矛盾的,因为您希望同一行的 meta_key 字段(由 id 均衡)在 umeta_tmp table 中为 'request_category' 并且同时为 'category'wp_usermeta 中。 考虑到这一点并将 WHERE 条件移动到 JOIN 中,结果将如下所示:

UPDATE wp_usermeta
JOIN umeta_tmp ON wp_usermeta.meta_key = 'category' AND 
               wp_usermeta.meta_value = 'travel_agency' AND
               umeta_tmp.umeta_id = wp_usermeta.umeta_id
SET wp_usermeta.meta_value = umeta_tmp.meta_value