2013-03-27 136 views
0

我有2個數據庫,一個用於操作,一個用於分析。比較兩個表的一致性(Mysql)與查詢

分析數據庫與操作數據庫不是1:1,但仍非常相似。

現在我將歸檔文件(csv)加載到分析數據庫(以前爲空)。

我在分析中使用了舊數據,並在操作數據庫中保存了當前數據。

我想編寫一個查詢來確定某些新加載的記錄是否已經在數據庫中。

有沒有辦法檢查出來?

編輯:

首先,我很抱歉。查看我的數據庫後犯了一個錯誤。我不需要比較兩個不同的數據庫,而通過phpmyadmin複製操作數據庫時,我忘了將當前數據加載到分析數據庫中。 所以我只需要比較一個數據庫中的兩個表,不管是否有一些舊記錄已經存在於數據庫中。

我的第一個想法是/是:

SELECT * 
FROM orderlinesold t1 
LEFT JOIN orderlines t2 on t1.orderid = t2.orderid; 

,但運行的查詢我得到的孔排,結果這是不可能的後 - >錯誤的查詢。

如何檢查一些舊數據是否仍在新數據中?

PS:表格在評論中作爲鏈接。

  1. 編輯:

確定我解決它。只是一個小比較查詢:

SELECT * 
FROM ordersold t1 
INNER JOIN orders t2 ON t1.orderid = t2.orderid 
LIMIT 100000000; 

或:

SELECT * 
FROM orderlinesold t1 
LEFT JOIN orderlines t2 ON t1.orderid = t2.orderid 
WHERE t2.orderid IS NOT NULL 
LIMIT 100000000; 

上廢棄正確的結果。

還是謝謝。這篇文章可以關閉。

+0

請提供該表的格式兩張桌子。更好的是,提供SQL,給出你所嘗試過的例子。 – 2013-03-27 19:50:59

+0

看起來像這個線程可能會幫助你http://stackoverflow.com/questions/225772/compare-two-mysql-databases?rq=1。否則,你可以爲每個表編寫查詢來分析,也許使用'IN'或'NOT IN'子句。 – Scotch 2013-03-27 19:53:19

+0

在這裏我的表:http://imgur.com/XpgwI35 – JOP 2013-03-27 20:06:57

回答

0

有工具來幫助你比較兩個數據庫,但基本技術,您可以使用,假設你可以依靠主鍵來標識缺失的記錄是:

select oo.id 
from  operations.orders oo 
left join analytics.orders ao 
on  oo.id = ao.id 
where  ao.id is null 
+0

謝謝,但我編輯我的線程,因爲我不需要比較2數據庫了,但2表,如果有相同的ID。這個查詢是否正確? SELECT * FROM orderlinesold t1 LEFT JOIN orderline t2 on t1.orderid = t2.orderid where t2。orderid不是null限制30000; – JOP 2013-03-27 21:14:07

+0

不,您必須在表格中尋找IS NULL,並減少記錄。假設orderlines有比orderlinesold更多的記錄,那麼它應該是:SELECT * FROM orderlinesold t1 RIGHT JOIN orderlines t2 on t1.orderid = t2.orderid其中t1.orderid是null limit 30000;請注意,我也將LEFT更改爲RIGHT。 – koriander 2013-03-27 21:33:30