1

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

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

我已经仔细检查了所有内容,但看不出为什么查询不能正确通过。有没有我错过的某种设置?

亲切的问候,丹尼尔

4

1 回答 1

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);

原因是如果 y 包含一个值,x NOT IN y它只能是falseNULL但永远不会。trueNULL


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

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

这种方法在值方面没有相同的问题NULL

于 2012-08-08T09:57:01.937 回答