2013-08-07 94 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 
); 
相关问题