2011-03-29 142 views
1

我有三個表作爲SQLITE3轉儲。比較多個Mysql表以找到修改的記錄

產品,稅收,庫存

在這些表中準備一個CSV文件導入到Magento的產品部分。那部分結束了。

現在必須運行每日腳本來更新庫存,稅金和修改過的產品詳細信息(SKU在任何情況下都不會更改)。

在此更新部分。 例如,我有12000條記錄,其中只有400或1000條記錄在庫存表,稅表,產品表中從最後一天的數據庫變化/修改/更新。其餘的行將保持不變。

因此,我添加了最後的日期表old_products,old_tax,old_inventory

並試圖編寫SQL查詢來從表

兩集的提取只修改的記錄(注:這兩套同一Db的可用表格)

請誰能幫助我如何通過比較兩組表來編寫一個sql查詢來提取修改後的記錄。

回答

1

我可能會改變這種模式。

我想有一個表,其中我將存儲日期(或多個),當我上次導出數據到CSV(S):

CREATE TABLE CSVLastExported (
    ProductsExportDate datetime, 
    TaxExportDate datetime, 
    InventoryExportDate datetime 
) 

然後我可以在每三個中有一個時間戳列將保存上次修改時間戳的表格。我會觸發更新該列。

然後查詢另一個出口修改後的數據將作爲CSVLastExported對相應列的LastModified列比較容易:

SELECT p.* 
FROM products p 
    INNER JOIN CSVLastExport e 
    ON p.LastModified > e.ProductsExportDate 
1

這給你所有的修改(和產品):

select * from products p inner join old_products o on p.id = o.id 

這種改性殼聚糖產品:

select * from products where id in (select id old_products) 
+0

在我看來,從我怎麼讀的問題,工作表總是包含所有的行。它們只與它們的'old_'對應不同,因爲*行中的一些*被修改。而修改後的子集是OP想要從每個子集中提取的。 – 2011-04-20 21:06:34

+0

@andry ..完全。你是對的。那就是我必須要做的。而舊的數據庫有8個表也新的數據庫有8個。所以我很難正確編寫連接查詢。將解決這個問題,並在這裏發佈我的答案。 – Elamurugan 2011-04-21 06:56:32