从另一个表插入数据

时间:2016-07-31 09:36:04

标签: mysql

我有两张桌子:

股票数据

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

我无法在Stock Data中的订单簿表中插入汇率,其中库存数据中的汇率应该是每种产品的最新批次。提前致谢

3 个答案:

答案 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

查找每种股票的最新批次的费率。

稍后,如果您在此表与匹配INNER JOIN的{​​{1}}表之间设置了OrderBook,并通过{{更新Stock表中的Rate 1}}上面的查询返回的值,你会得到你想要的。

答案 1 :(得分: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

应沿着这些方向

答案 2 :(得分: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