我是编写SQL语句的新手,所以如果这是一个提出SQL问题的循环方式,请原谅我。顺便说一句,这与Wordpress的wp_postmeta数据库有关。
我试图在我写的这句话中选择行:
SELECT post_id FROM wp_postmeta WHERE meta_key = 'pb-city'
并使用这些post_id来过滤使用SAME post_id但在meta_key列中使用不同键的行。那时,我相信我会运行的代码看起来像这样:
UPDATE wp_postmeta SET meta_value='locations-page' WHERE meta_key='_wp_page_template'
我认为问题是我不知道在更新表时如何过滤我的范围。我知道如何过滤,我知道如何更新,但我不知道如何采用过滤表并更新某些值。
有什么建议吗? 谢谢!
答案 0 :(得分:2)
有几种方法可以做到这一点。假设您的唯一标识符名为id
:
update wp_postmeta p1
join wp_postmeta p2 on p1.id <> p2.id and p1.post_id = p2.post_id
set p1.meta_value='locations-page'
where p1.meta_key='_wp_page_template'
and p2.meta_key = 'pb-city';
或者,您也可以将EXISTS
与相关子查询一起使用,但是您必须使用其他子查询,因为rdbms
存在轻微限制并在使用时更新记录子查询中的同一个表:
update wp_postmeta p1
set p1.meta_value='locations-page'
where p1.meta_key='_wp_page_template'
and exists (
select 1
from (select * from wp_postmeta) p2
where p1.id <> p2.id
and p2.meta_key = 'pb-city'
and p1.post_id = p2.post_id
)
编辑:
重新阅读您的帖子,也许您没有id
字段,但您只想加入meta_key
不一样。如果是这种情况,您只需从查询中删除p1.id <> p2.id
即可。
答案 1 :(得分:0)
尝试选择
从wp_postmeta中选择*,其中post_id in(SELECT post_id FROM wp_postmeta WHERE meta_key =&#39; pb-city&#39;)和meta_key&lt;&gt; &#39; PB-城市&#39;
更新取决于您的范围,例如
更新wp_postmeta设置SET meta_value =&#39; locations-page&#39;在哪里post_id(SELECT post_id FROM wp_postmeta WHERE meta_key =&#39; pb-city&#39;)和meta_key =&#39; _wp_page_template&#39;
在更新之前尝试使用
结果从wp_postmeta中选择* WHERE post_id in(SELECT post_id FROM wp_postmeta WHERE meta_key =&#39; pb-city&#39;)和meta_key =&#39; _wp_page_template&#39;