2016-07-31 97 views
3

插入数据我有两个表:从另一个表

股票数据

Batch Stock Rate 
------------------------ 
123---ABC---123 
251---XYZ---50 
250---XYZ---55 
247---XYZ---48 
118---ABC---120 
310---PQR---77 
309---PQR---76 

,第二个表 订单簿

Date-------Stock---qty--Rate 
-------------------------- 
2016-01-01---ABC---10---Null 
2016-01-02---XYZ---25---Null 
2016-01-03---PQR---18---Null 
2016-01-04---XYZ---50---Null 

我坚持的顺序插入率从库存数据中预订表格,其中库存数据中的比率应该是每个产品的最新批次。在此先感谢

+0

“股票数据,其中在股票数据应该是最新一批对每个产品的速度” - 可以你做这个更具体一些,并添加一个例子? – Philipp

+0

你如何定义最新批次? 'Batch'的最大价值? – 1000111

+0

@ Philipp ABC的费率应该是123,最新的批号是 – Kris

回答

0

尝试此查询: -

UPDATE order_book ob, (
      SELECT rate, stock 
      FROM stock_data sd 
      GROUP BY stock 
      HAVING MAX(batch) 
      ORDER BY batch DESC 
    ) result 
SET ob.rate = result.rate 
WHERE ob.stock = result.stock 
+0

错误代码:1175.您正在使用安全更新模式,并且您尝试更新没有使用KEY列的WHERE表。要禁用安全模式,请在首选项 - > SQL编辑器中切换选项并重新连接。 – Kris

+0

运行此SET SQL_SAFE_UPDATES = 0; –

1

请尝试以下查询:

UPDATE OrderBook OB 
INNER JOIN (
    SELECT 
     SD.Stock, 
     SD.Rate 
    FROM StockData SD 
    INNER JOIN (
     SELECT 
      Stock, 
      MAX(Batch) max_batch 
     FROM StockData 
     GROUP BY Stock 
    ) AS t 
    ON SD.Stock = t.Stock AND SD.Batch = t.max_batch 
) AS maxBatchRateTable 
ON OB.Stock = maxBatchRateTable.Stock 
SET OB.Rate = maxBatchRateTable.Rate; 

说明:

这个查询

SELECT 
     SD.Stock, 
     SD.Rate 
    FROM StockData SD 
    INNER JOIN (
     SELECT 
      Stock, 
      MAX(Batch) max_batch 
     FROM StockData 
     GROUP BY Stock 
    ) AS t 
    ON SD.Stock = t.Stock AND SD.Batch = t.max_batch 

发现从最新一批每只股票的速度。

以后如果你做这个表,你OrderBook表之间的INNER JOIN匹配Stock并通过上面的查询,你会得到你想要的返回值rate更新OrderBookRate

+0

哈哈,假如我用过短别名我本可以是第一个 – Philipp

+0

为什么你删除你的答案@Philipp。我们同时开始工作。其他人可能优先于其他人。这不是什么大不了的事。希望你今后不再重复。 :) – 1000111

+0

错误代码:1175.您正在使用安全更新模式,并且您尝试更新没有使用KEY列的WHERE表。要禁用安全模式,请在首选项 - > SQL编辑器中切换选项并重新连接。 – Kris

0
UPDATE 
    order_book 
INNER JOIN 
    (
     SELECT 
     Rate, 
     Stock 
     FROM 
     stock_data 
     INNER JOIN 
     (
      SELECT 
       MAX(Batch) AS batch, 
       stock  
      FROM 
       stock_data  
      GROUP BY 
       Stock 
     ) AS latestBatch  
      ON stock_data.Batch = latestBatch.batch 
      AND stock_data.stock = latestBatch.stock 
     ) AS updateData 
      ON updateData.Stock = order_book.Stock 
     SET 
     order_book.Rate = updateData.Rate 

应该是沿着这些线路

+0

感谢您撤消**删除** – 1000111

+0

以为有没有需要在答案中两次相同的查询,但我想这也不会伤害:) – Philipp

+0

其实我认为你总是可以让你的答案**明显* *通过添加更多细节。这样做,我相信你的努力不会白费。 – 1000111