如何根据另一个查询的值运行UPDATE查询?

时间:2012-08-07 20:58:40

标签: mysql

我正在尝试在MySQL数据库上使用UPDATE运行REPLACE

我有一个WordPress数据库表(wp_postmeta),其中包含四个字段:post_idmeta_idmeta_keymeta_value

我想REPLACE denticulata 的所有实例 heteropoda 如果该帖子(即该行{{ 1}})还有一行post_id属,meta_key Corydoras

例如,

meta_value

只有post_id meta_id meta_key meta_value 4 14 breeding Some stuff here about breeding denticulata 2 15 breeding Some stuff here about breeding denticulata 4 16 genus Corydoras 2 17 genus Apistogramma meta_id 14的行实际上应该在那里进行更改,因为post_id 2的行不是来自 Corydoras genus。

这可能吗?我不知道从哪里开始。

提前致谢,

1 个答案:

答案 0 :(得分:0)

UPDATE 
    wp_postmeta AS upd
  JOIN
    wp_postmeta AS chk
      ON  chk.post_id = upd.post_id
SET
    upd.meta_value = REPLACE(upd.meta_value, 'denticulata', 'heteropoda')
WHERE
      chk.meta_key = 'genus'
  AND chk.meta_value = 'Corydoras'
  AND upd.meta_key = 'breeding' ;           -- not sure if you need this line

请注意,这也会使用'denticulatas'更新'heteropodas'(以及包含字符串denticulata的任何其他字词)并且REPLACE()区分大小写,因此{{ 1}}不会被替换。