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がnullである行がいくつかありますか?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にのみ、falseまたはそうではNULLないためです。trueNULL


他のアプローチの1つを使用して、あるテーブルでは発生するが別のテーブルでは発生しない値を見つけることもできます。たとえば、EXISTSを使用します。

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

このアプローチでは、値に関して同じ問題は発生しませんNULL

于 2012-08-08T09:57:01.937 に答える