2016-05-24 95 views
1

我有2个表从不同的来源获得不同的值。 一个表称为stock有2场,代码和股票,而其他有代码,股票(和一大堆更多不相关的东西我想做的事情) 基本上我对是否有足够数量的检查当前的查询是继从嵌套SELECT查询MySQL更新

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

哪些工作,但我想扩展它到表products的更新stock字段值为0为上述查询的结果。

谢谢

回答

2

试试这个:

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 
+0

干杯,完美的作品!我一开始尝试自己做,但失败惨败...... – Kosta

1

那么,为什么你不这样做呢?它非常相似,你只是做:

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 
+0

对于这个作品以及记录,但是有人已经upvoted和我都第一次测试@Giorgos解决方案并将其标记为解决方案... – Kosta

+0

是的,但是有人已经提出了他的解决方案,因此首先向我展示了他的建议 - 因此我已经厌倦了他的第一个...然后也尝试了你的建议,这也是所说的工作,因此我相应地提出了相应的建议。 – Kosta

+0

是的,我明白你的意思,刚才提到它习惯接受第一个答案,或者是最好的答案。 @Kosta – sagi