2016-07-31 49 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