簡體   English   中英

將SELECT查詢結果中的多行更新為同一個表

[英]Update multiple rows from results from a SELECT query to the same table

我想弄清楚如何組合這兩個查詢。

SELECT `o`.`Order_ID`
FROM `Orders` `o`
JOIN `CustomerDetails` `cd` ON `cd`.`Customer_ID` = `o`.`Customer_ID`
WHERE `o`.`OrderPlaceServerTime` >= '2013-06-01 00:00:00'
AND `o`.`OrderPlaceServerTime` <= '2013-06-31 23:59:59'
AND `cd`.`SalesRep_ID` = 6

這給了我一個Order_ID列表,我需要使用上面的Query中的SalesRep_ID = 6來更新。

從上面的查詢中獲取Order_ID列表后,我使用...

UPDATE Orders SET SalesRep_ID =  '6'
WHERE  (Order_ID = 541304
OR  Order_ID = 541597
OR  Order_ID = 542318)

這樣做會使用正確的SalesRep_ID更新訂單。

最后,我想將這些組合起來進行一次查詢,我只想更改SalesRep_ID

具有適當UPDATE語法的解決方案,其中包含用於MySql的JOIN

UPDATE Orders o JOIN CustomerDetails d 
    ON d.Customer_ID = o.Customer_ID
   SET o.SalesRep_ID = 6
 WHERE o.OrderPlaceServerTime >= '2013-06-01 00:00:00'
   AND o.OrderPlaceServerTime <= '2013-06-31 23:59:59'
   AND d.SalesRep_ID = 6

這是SQLFiddle演示

您可以通過簡單地組合它們在單個查詢中執行此操作:

UPDATE Orders SET SalesRep_ID =  '6'
WHERE Order_ID IN (
   SELECT `o`.`Order_ID`
   FROM `Orders` `o`
   JOIN `CustomerDetails` `cd` ON `cd`.`Customer_ID` = `o`.`Customer_ID`
   WHERE `o`.`OrderPlaceServerTime` >= '2013-06-01 00:00:00'
      AND `o`.`OrderPlaceServerTime` <= '2013-06-31 23:59:59'
      AND `cd`.`SalesRep_ID` = 6
);

這有一個小技巧。 你必須欺騙MySQL以為你正在研究不同的表。

UPDATE Orders SET SalesRep_ID =  '6'
WHERE  (Order_ID IN (SELECT order_id FROM (SELECT `o`.`Order_ID`
FROM `Orders` `o`
JOIN `CustomerDetails` `cd` ON `cd`.`Customer_ID` = `o`.`Customer_ID`
WHERE `o`.`OrderPlaceServerTime` >= '2013-06-01 00:00:00'
AND `o`.`OrderPlaceServerTime` <= '2013-06-31 23:59:59'
AND `cd`.`SalesRep_ID` = 6) AS TEMP));

鏈接到SQLFiddle

暫無
暫無

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

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