2014-09-25 65 views
0

我是新来编写SQL语句的,所以请原谅我,如果这是一个问题的SQL问题。顺便说一下,这是关于WordPress的wp_postmeta数据库。如何按ID筛选行然后更新具有相同ID的其他行

我试图采取这种说法我写了选择的行:

SELECT post_id FROM wp_postmeta WHERE meta_key = 'pb-city' 

,并使用这些POST_ID的行筛选具有相同POST_ID但在meta_key列不同的密钥。在这一点上,我相信我会运行的代码可能是这个样子:

UPDATE wp_postmeta SET meta_value='locations-page' WHERE meta_key='_wp_page_template' 

我认为,问题是,我不知道如何更新表时,我过滤的范围。我知道如何过滤,我知道如何更新,但我不知道如何去过滤表格并更新某些值。

有什么建议吗? 谢谢!

回答

0

尝试一下本作选择

SELECT * FROM wp_postmeta其中POST_ID在(SELECT POST_ID FROM wp_postmeta WHERE meta_key =“PB城市)和meta_key <>”PB城市

更新取决于你范围例如

更新wp_postmeta集SET meta_value = '位置页的' WHERE POST_ID中(选择POST_ID FROM wp_postmeta WHERE meta_key =“PB城市)和meta_key = '_wp_page_template'

upda之前TE尝试用结果

SELECT * FROM wp_postmeta WHERE POST_ID在(SELECT POST_ID从那里meta_key =“PB城市wp_postmeta)和meta_key = '_wp_page_template'

+0

select * from wp_postmeta where post_id in(SELECT post_id FROM wp_postmeta WHERE meta_key ='pb-city')-----这似乎很适合检索我正在查找的值,但是如何更新此过滤表? – wackerfuss 2014-09-25 20:55:50

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

相关问题