簡體   English   中英

MySQL更新查詢,其中條件僅更新一條記錄

[英]MySQL update query with where condition only updating one record

我有兩個表:

  1. 產品詳細信息-用於存儲產品信息。
  2. 產品詳情-用於可能由不同用戶出售的多個副本。

我正在使用此選擇查詢來收集listings table = (SELECT product_name, MIN(price) FROM product_listings GROUP BY product_name)上具有相同名稱的產品的最低價格。 $ product$ min_price分別是我在兩個字段中使用的變量。

這樣效果很好,並為我提供了具有相同product_name的所有產品的最低價格。

product_name | Lowest price
Title        | £0.69
Title        | £7.98

現在,我要使用此數據更新產品詳細信息表(特別是“ lowest_price”列),以便每個動態呈現的產品都顯示可用的最便宜副本的價格。

到目前為止,我已設法使用此update query = ("UPDATE product_details SET lowest_price='$min_price' WHERE product_name='$product'");來僅更新一條記錄update query = ("UPDATE product_details SET lowest_price='$min_price' WHERE product_name='$product'");

是否可以使用這樣的更新查詢來更新所有記錄? 為什么只更新一條記錄?

假設您在product_listings表中有一個product_id,它與product_details表中的id字段相關,則可以執行以下操作:

update products p 
    inner join (
        select product_id, min(price) min_price 
            from product_listing 
            group by product_id
        ) pl 
    on p.id = pl.product_id 
    SET p.min_price = pl.min_price

如果不是這種情況,而您只想加入產品名稱(不是一個好主意),那就是:

update products p 
    inner join (
        select product_name, min(price) min_price 
            from product_listing 
            group by product_name
        ) pl 
    on p.product_name = pl.product_name 
    SET p.min_price = pl.min_price

小提琴示例: http ://sqlfiddle.com/#!9/ 9b928/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM