更新' meta_value'从wp_usermeta表中分配另一个' meta_value'的值同一张桌子

时间:2015-10-28 18:07:39

标签: mysql sql wordpress select subquery

我为混乱和繁琐的问题道歉,但无论如何我需要做以下事情:在' wp_usermeta' table我有字段(meta_keys)' category'和' request_category'适用于所有用户。现在我想要覆盖'类别'的meta_value。使用meta_value' request_category'其中'类别'具有特定的价值。

但是在执行SQL查询后,我在'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'    

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

有人能暗示我怎样才能实现这一目标。 感谢。

1 个答案:

答案 0 :(得分:1)

使用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表只是wp_usermeta表中的副本,则JOINWHERE条件是矛盾的,因为您需要meta_key字段同一行(id的均衡)在'request_category'表格中为umeta_tmp,同时在'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