2012-08-08 91 views
1

我想运行一个SQL查询来更新表,如果一个ID不存在于另一个表中。 继承人的查询:在本地服务器上工作但不在我的实时服务器上的SQL语法?

UPDATE product 
SET active = 0 
WHERE id NOT IN (SELECT product_id FROM image); 

如预期在我的本地服务器上的此查询的工作(运行的Apache/MySQL的)。 但我的专用服务器上(也运行的Apache/MySQL的),它只是返回这个:

Query OK, 0 rows affected (0.19 sec) 
Rows matched: 0 Changed: 0 Warnings: 0 

但我知道它应该影响某些行。

我已经双重检查了一切,但看不到为什么查询不会正确通过。 有没有我错过了某种设置?

亲切的问候, 丹尼尔

回答

2

你有一些行,其中的product_id为空?使用NOT IN时,必须过滤这些了:

UPDATE product 
SET active = 0 
WHERE id NOT IN (SELECT product_id FROM image WHERE product_id IS NOT NULL); 

的原因是x NOT IN y只能falseNULL,但从来没有true如果y包含NULL值。


您也可以使用其他方法之一来查找发生在一个表中,但不是在另一个值。例如,使用EXISTS:

UPDATE product 
SET active = 0 
WHERE NOT EXISTS (SELECT * FROM image WHERE product_id = product.id); 

此方法与NULL值没有相同的问题。

+0

那么,他们不存在,这就是我想要获取。 – Vanchi 2012-08-08 10:44:32

+0

@DanielRunnakkoLöfgren:您是否尝试运行我发布的查询?它给了你想要的结果吗? – 2012-08-08 10:50:48

+0

我的不好。你查询完成了这项工作。感谢您的回复! – Vanchi 2012-08-08 11:10:19

相关问题