MySQL 从嵌套 SELECT 查询更新

MySQL update from nested SELECT query

我有 2 个 table 从不同来源获取不同的值。 一个名为 stock 的 table 有 2 个字段,code 和 stock,而其他的有 code,stock(还有一些与我想做的无关) 基本上我当前的检查是否有足够数量的查询如下

SELECT * 
FROM products
WHERE products.code 
NOT IN (SELECT stock.code from stock) 
AND products.stock > 0 
AND products.product_active = 1

有效,但我想将其扩展到 table products 的 UPDATE stock 字段,将上述查询结果的值设为 0。

谢谢

那你为什么不这样做呢?它与您刚才所做的非常相似:

UPDATE products p
SET p.stock = 0
WHERE p.code NOT IN(SELECT s.code FROM stock s)
  AND p.stock > 0
  AND p.product_Active = 1

我不喜欢使用 IN() 语句,因为它不能很好地处理 NULL 值,您也可以使用 NOT EXISTS() 代替它:

UPDATE products p
SET p.stock = 0
WHERE NOT EXISTS(SELECT 1 FROM stock s 
                 WHERE p.code = s.code)
  AND p.stock > 0
  AND p.product_Active = 1

试试这个:

UPDATE products p
LEFT JOIN stock s ON p.code = s.code
SET p.stock = 0
WHERE p.stock > 0 AND p.product_active = 1 AND s.code IS NULL