SQL语法在本地服务器上工作但不在我的实时服务器上?

时间:2012-08-08 09:54:35

标签: mysql where

如果另一个表中不存在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

但我知道它会影响一些行。

我已经仔细检查了所有内容但却看不出为什么查询无法正确查看。 是否有某种设置我可能会错过?

亲切的问候, 丹尼尔

1 个答案:

答案 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,但如果y包含true值,则NULL永远不会UPDATE product SET active = 0 WHERE NOT EXISTS (SELECT * FROM image WHERE product_id = product.id);


您还可以使用其他方法之一来查找在一个表中出现但在另一个表中不出现的值。例如,使用EXISTS:

NULL

此方法与{{1}}值没有相同的问题。