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
我有 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