2013-08-07 150 views
3

我想弄清楚如何結合這兩個查詢。從SELECT查詢的結果更新多行到同一個表

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 s表示我需要與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

回答

5

溶液與適當UPDATE語法與JOIN用於MySQL的

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 demo

1

有一個小技巧了這一點。你必須讓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)); 

Link to SQLFiddle

2

你可以只是簡單地將它們結合起來做一個單一的查詢:

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 
); 
相關問題