MySQL查询0行受影响

时间:2012-04-08 10:01:20

标签: mysql sql phpmyadmin

简单地说,我尝试在PhpMyAdmin中执行此操作:

  

更新wp_postmeta.meta_value = wp_posts.id

     

wp_posts.post_name = articles.image

     

AND wp_posts.post_type =附件

     

AND wp_postmeta.meta_key = _thumbnail_id

通过这个MySQL查询:

update wp_postmeta m
join articles a on (m.post_id = a.id)
join wp_posts p on (m.post_id = p.ID)
set m.meta_value = p.ID
where p.post_name=a.image
AND a.image != NULL
AND p.post_type='attachment'
AND m.meta_key='_thumbnail_id'

它的工作但是有0行受到影响! 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

本声明:

AND a.image != NULL

始终评估为unknownwhere子句会过滤掉不是true的行。因此where过滤了unknownfalse。试试这个:

AND a.image is not null

有关详细信息,请参阅this wikipedia article

答案 1 :(得分:1)

将子查询与Andomar的答案一起使用。使用带有update和delete语句的连接并不好。

应该是

UPDATE wp_postmeta m SET m.meta_value = (SELECT p.ID FROM wp_posts p, articles a 
WHERE m.post_id=p.ID AND m.post_id = a.id AND a.image IS NOT NULL 
   AND p.post_type='attachment' AND p.post_name=a.image) 
WHERE m.meta_key='_thumbnail_id'

首先备份!我没有对此进行测试。

如果不起作用,请尝试执行选择查询,如果可以选择它们。如果它没有选择(也可能不会),请检查与您的设计相对应的查询结构。

SELECT m.meta_value, (SELECT p.ID FROM wp_posts p, articles a 
WHERE m.post_id=p.ID AND m.post_id = a.id AND a.image IS NOT NULL 
   AND p.post_type='attachment' AND p.post_name=a.image)  AS pID
FROM wp_postmeta m
WHERE m.meta_key='_thumbnail_id'

也可以尝试第一个查询

SELECT m.meta_value, p.ID AS pID FROM wp_postmeta m
INNER JOIN articles a on (m.post_id = a.id)
INNER JOIN wp_posts p on (m.post_id = p.ID)
WHERE p.post_name=a.image
AND a.image IS NOT NULL
AND p.post_type='attachment'
AND m.meta_key='_thumbnail_id'

尝试使用/修改选择查询以找出问题。