Php 当WHERE value是具有多行结果的子查询时,如何更新行
我想运行以下SQL:Php 当WHERE value是具有多行结果的子查询时,如何更新行,php,mysql,sql,Php,Mysql,Sql,我想运行以下SQL: UPDATE wp_postmeta SET meta_value = 1.00 WHERE meta_key = '_test' AND post_id = (SELECT post_id FROM wp_postmeta WHERE meta_value = 8032) 我希望它将meta\u值设置为1.00,其中meta\u键是\u test,post\u id是从
UPDATE wp_postmeta
SET meta_value = 1.00
WHERE meta_key = '_test'
AND post_id = (SELECT post_id
FROM wp_postmeta
WHERE meta_value = 8032)
我希望它将meta\u值设置为1.00
,其中meta\u键是\u test
,post\u id
是从子查询返回的post\u id
:从wp\u postmeta中选择post\u id,其中meta\u值=8032
在phpMyAdmin中模拟此查询时,它表示子查询有多个结果,因此如何使其工作
也许这在SQL中并不是真正需要做的事情,我想我可以将post\u id
子查询结果拉入PHP,然后循环遍历它们,然后执行原始SQL..?将=
替换为中的:
UPDATE wp_postmeta
SET meta_value = 1.00
WHERE
meta_key = '_test'
AND post_id IN (SELECT post_id FROM wp_postmeta WHERE meta_value = 8032)
但既然表是一样的,为什么不:
UPDATE wp_postmeta
SET meta_value = 1.00
WHERE
meta_key = '_test'
AND meta_value = 8032
错误
表“wp_Posteta”指定了两次,既作为“更新”的目标,也作为单独的数据源
可以固定为
UPDATE wp_postmeta
SET meta_value = 1.00
WHERE
meta_key = '_test'
AND post_id IN (
SELECT * FROM (
SELECT post_id FROM wp_postmeta WHERE meta_value = 8032
) t
)
将=
中的替换为:
UPDATE wp_postmeta
SET meta_value = 1.00
WHERE
meta_key = '_test'
AND post_id IN (SELECT post_id FROM wp_postmeta WHERE meta_value = 8032)
但既然表是一样的,为什么不:
UPDATE wp_postmeta
SET meta_value = 1.00
WHERE
meta_key = '_test'
AND meta_value = 8032
错误
表“wp_Posteta”指定了两次,既作为“更新”的目标,也作为单独的数据源
可以固定为
UPDATE wp_postmeta
SET meta_value = 1.00
WHERE
meta_key = '_test'
AND post_id IN (
SELECT * FROM (
SELECT post_id FROM wp_postmeta WHERE meta_value = 8032
) t
)
将
中的
替换为
中的
当您从同一个表中获取和更新数据时,这里需要子查询什么?将
=
替换为中的当您从同一个表中获取和更新数据时,这里需要子查询什么?因为post\u id可能引用了多个元数据_value@Strawberry即便如此“post_id可能指的是多个meta_值”第二个查询将完成此项工作,但查询:选择*FROMwp_postmeta
WHEREmeta_key
=“test”和post_id
IN(选择post_id FROMwp_postmeta
WHERE meta_value=8023)返回SQL错误:表“wp_postemta”被指定两次,既作为“更新”的目标,也作为“更新”的单独源data@MAZux不,不会的t@MAZux参见示例(我以一种与MySQL兼容的方式重写了第一个查询,但没有改变其含义)。如你所见,结果是不同的:因为post_id可能引用多个meta_value@Strawberry即使如此,“post_id可能引用多个meta_值”,第二个查询也可以完成此项工作。答案=在工作中,但是查询:选择*FROMwp_postmeta
WHEREmeta_key
='\u test'和post_id
IN(从wp_postmeta
中选择post_id,其中meta_value=8023)返回SQL错误:表'wp_postmeta'被指定两次,既作为'UPDATE'的目标,也作为'UPDATE'的单独源data@MAZux不,不会的t@MAZux参见示例(我以与MySQL兼容的方式重写了第一个查询,但没有改变其含义).正如您所看到的,结果是不同的: