繁体   English   中英

使用SQL select查询的结果更新表

[英]Using the result of a SQL select query to update a table

我已经在zen cart电子商务网站上进行了相当广泛的工作,并且我对php有很好的了解,但只有SQL的基础知识。 我的问题与涉及的禅宗车或PHP无关,而是与三个表之间的相互作用有关。

表1:inventoryexport->列:item_num,item_price,item_stock
表2:zen_products_supplier->列:products_id,australiait_code
表3:zen_products->列(色号,但相关列):products_id,products_price

现在,我希望通过选择item_num = australiait_code的所有产品,用库存导出表中的item_price更新zen_products表中的“ products_price”。

我可以通过此查询选择所需的信息,但不确定如何将其直接插入zen_products表的更新查询中。

SELECT zen_products_supplier.products_id, inventoryexport.item_price, inventoryexport.item_stock
FROM zen_products_supplier
INNER JOIN inventoryexport
ON inventoryexport.item_num=zen_products_supplier.australiait_code

任何帮助将不胜感激。

这是您主题的最佳答案: MySQL-基于SELECT查询的UPDATE查询

可能您必须创建临时表。 因为使用从同一表中进行选择来更新表可能会出现问题。

如果要求使用item_num = australiait_code的所有产品的库存导出表中的item_price总数更新zen_products表中的“ products_price”,则以下查询将起作用:

update zen_products  
set products_price  = (select sum(ie.item_price) 
                       from inventoryexport ie join zen_products_supplier zps on ie.item_num = 
                       zps.australiait_code )

但是,如果要使用所有产品的库存导出表中的item_price总数更新zen_products表中的“ products_price”,则item_num = australiait_code以及zen_products_supplier = zen_products表中正在更新的当前行的产品id查询将起作用:

update zp
set zp.products_price = (select sum(ie.item_price)                     
                     from zen_products_supplier zps  
                     join inventoryexport ie on ie.item_num = zps.australiait_code
                     where zps.products_id = zp.products_id)
from zen_products as zp

希望这可以帮助。

通过将SQL分为两个步骤,我终于解决了这个愚蠢的问题。

UPDATE 
inventoryexport ie, zen_products_supplier zps 
SET 
ie.products_id=zps.products_id 
WHERE ie.item_num=zps.australiait_code;

然后执行以下命令:

UPDATE
zen_products zp, inventoryexport ie 
SET 
zp.products_quantity=ie.item_stock, zp.products_price=ie.item_price 
WHERE 
ie.products_id=zp.products_id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM