MySQL,SQL-如何同时选择,更新和替换

时间:2018-06-27 21:02:42

标签: mysql sql database

在问题被标记,关闭或试图在网站上寻找答案的任何事情之前,我总是找到我所寻找的内容或我想做的事情的一部分,但从来没有具体的东西,我已经尝试过进行 SELECT UPDATE ,但不要执行 SELECT UPDATE REPLACE

所以我的问题是这个

我有一个Wordpress数据库表wp_posts和另一个名为wp_postmeta的表, wp_post的一行名为post_content,而wp_postmeta的一行名为meta_key,我正在尝试 SELECT UPDATE REPLACE 来自wp_post.post_content的字符串,而不会更改其他条目。为了不修改其他条目,我需要从wp_postmeta.meta_key中选择具有meta_key city ”的条目。

所以基本上,如果我跑步

SELECT p.post_content FROM wp_post p
INNER JOIN wp_postmeta m ON p.id = m.post_id
WHERE p.post_content LIKE "%TEXT I NEED TO REPLACE%"
AND m.meta_key LIKE "%city%";

这将为我提供5000条条目中的600条,它们共享我需要替换的相同文本。

所以,如果我刚跑步

UPDATE wp_post SET post_content = REPLACE 
(post_content, 'TEXT I NEED TO REPLACE', 'NEW TEXT THAT I AM REPLACING');

这将更改5000个条目,但我不希望这样做,我需要替换之前运行的 SELECT 查询中的600个条目。

总而言之,我需要一种以某种方式合并这两个查询的方式,以便替换那600个条目的post_content字符串,而不影响剩下的其他4400个,这是可以实现的吗?

我希望我的问题足够清楚。再次感谢。

(我正在为此使用Sequel Pro)

1 个答案:

答案 0 :(得分:1)

您可以在JOIN查询中使用WHEREUPDATE,就像SELECT查询一样,过滤要更新的行。

UPDATE wp_post AS p
JOIN wp_postmeta AS m ON p.id = m.post_id
SET p.post_content = REPLACE(post_content, 'TEXT I NEED TO REPLACE', 'NEW TEXT THAT I AM REPLACING')
WHERE p.post_content LIKE "%TEXT I NEED TO REPLACE%"
AND m.meta_key LIKE "%city%";