2013-03-27 139 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