【问题标题】:Compare the rows of 2 tables in 2 different databases比较 2 个不同数据库中 2 个表的行
【发布时间】:2016-07-14 16:59:54
【问题描述】:

我有 2 个不同的数据库。两者都有一张叫做水果的桌子。现在我想相对于第一个数据库更新第二个数据库。为此,我将第一个数据库中的所有列值(ID 列除外)的每一行与第二个数据库中的每一行进行比较,并获取那些存在差异的行。我正在使用的查询是

SELECT A.* FROM db1.Fruit A 
           Left Outer Join Fruit B ON 
           (A.Ratings = B.Ratings  AND A.Name = B.Name  AND A.Color = B.Color) 
where B.Ratings  IS NULL OR B.Name  IS NULL OR B.Color  IS NULL

Table in the first databaseTable in the second database

现在结果中应该显示名称为 Kiwi 且颜色为绿色的 ID 为 3 的行。但它也显示 ID 为 4 且名称为 Banana 的行,因为其他列为空,在我的查询中,如果B.Ratings IS NULL or B.Color IS NULL 则返回该行。

那么有没有其他方法可以按所有列(ID 列除外)比较表 1 的 1 行与表 2 的 1 行并返回任何列值不匹配的行?

【问题讨论】:

标签: c++ sqlite


【解决方案1】:

我一直很困惑:) 编辑: 我回到我最初的反应

SELECT A.* 
FROM db1.Fruit as A JOIN db2.Fruit as B ON 
(A.Name = B.Name  AND A.Color = B.Color )
WHERE A.Rating <> B.Rating 

LEFT OUTER JOIN 将给出左侧带有 Null 的行(您将看到它的右侧部分);这不是你想做的(至少这是我目前的理解)。 该语句将为您提供: db1 上与 db2 具有相同名称和颜色但评级不同的信息(我认为这是您想要获得的)。 如果要更改列的组合,则必须更改联接。

【讨论】:

  • 内连接会给我两个不同的行。我只需要那些在第一个但不在第二个的。那么我应该使用哪个?另外我想知道 运算符的使用以及当评级或名称或颜色任何一个都可能不同时该怎么做 B.NameA.Name 和 B.ColorA.Color ?
  • 我想获取那些在第一个但不在第二个数据库中的行。我也想根据列的组合选择行。我可以通过使用 EXCEPT 或 MINUS 命令来完成它,但问题是它比较了所有列。我不想比较 ID 列(ID 可以不同,但​​其余列值应该相同)。此外,如果两个数据库中的这些列中的值为空,它不应该返回该行。我上面提到的命令还返回那些在两个数据库中的值为该列的空值的行。我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
相关资源
最近更新 更多