簡體   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