【问题标题】:Comparing two tables for consistency (Mysql) with a query用查询比较两个表的一致性(Mysql)
【发布时间】:2013-03-27 19:47:23
【问题描述】:

我有 2 个数据库,一个用于操作,一个用于分析。

分析数据库与操作数据库不是 1:1 相同,但仍然非常相似。

现在我将存档文件 (csv) 加载到分析数据库中(之前它是空的)。

我在分析中有我的旧数据,在操作数据库中有我的当前数据。

我想写一个查询来查明一些新加载的记录是否已经在数据库中。

有没有办法检查一下?

编辑:

首先我很抱歉。查看我的数据库后犯了一个错误。我不需要比较两个不同的数据库,在通过 phpmyadmin 复制操作数据库时,我忘记将当前数据加载到分析数据库中。 所以我只需要比较一个数据库中的2个表,是否有一些旧记录已经在数据库中。

我的第一个想法是/曾经是:

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

但是在运行该查询之后,我得到了孔行,这是不可能的 --> 错误的查询。

如何检查一些旧数据是否仍在新数据中?

PS:表格在 cmets 中作为链接。

  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;

两者都丢弃了正确的结果。

还是谢谢。此帖可以关闭。

【问题讨论】:

  • 请提供两个表格的表格格式。更好的是,提供 SQL 来举例说明您已尝试过的操作。
  • 看起来这个帖子可以帮助你stackoverflow.com/questions/225772/…。否则,您可以为每个表编写查询来分析它,可能使用INNOT IN 子句。
  • 这里是我的桌子:imgur.com/XpgwI35

标签: mysql sql database


【解决方案1】:

有一些工具可以帮助您比较两个数据库,但您可以使用的基本技术(假设您可以依靠主键来识别丢失的记录)是:

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

【讨论】:

  • 谢谢,但我编辑了我的线程,因为我不再需要比较 2 个数据库,但如果有相同的 id 则需要比较 2 个表。这个查询是否正确? SELECT * FROM orderlinesold t1 LEFT JOIN orderlines t2 on t1.orderid = t2.orderid where t2.orderid is not null limit 30000;
  • 不行,你必须在记录较少的表中寻找IS NULL。假设 orderlines 的记录多于 orderlinesold,那么它应该是: SELECT * FROM orderlinesold t1 RIGHT JOIN orderlines t2 on t1.orderid = t2.orderid 其中 t1.orderid 为 null 限制 30000;请注意,我也将 LEFT 更改为 RIGHT。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 2010-12-27
相关资源
最近更新 更多