【问题标题】:Comparing Table 1 with Table 2 in Netezza where Table 1 has million records比较表 1 和 Netezza 中的表 2,其中表 1 有百万条记录
【发布时间】:2016-04-07 13:59:20
【问题描述】:

我是 SQL 新手并尝试了示例,但没有按照我的要求找到它。如果有专业人士能够回答,我会很高兴。

我有一个包含 150 列和数百万条记录的表 A。我需要比较表 A 和表 B(表 A 和 B 都在 Netteza)。

我需要一个 SQL 查询,它可以逐条比较表 A 和 B 的记录,如果表 B 的记录存在差异,则给我结果。

表 A

FirstName LastName ZipCode
Gary      Martin   500020
John      Mills    788802

表 B

FirstName LastName ZipCode
Gary      Martin   500020
John      Mill     788802

预计会得到这样的结果:

FirstName LastName ZipCode   FirstName LastName ZipCode 
John      Mills    788802    John      Mill     788802

【问题讨论】:

  • Gary 和 Martin 的其他记录呢
  • 由于 Gary Martin 记录在表 B 中没有差异,因此无需在结果中显示。
  • 150 列?去打那个建造它的人的鼻子。 >.
  • 从表 A 和表 B 中选择 *
  • Select * from Table A AND Table B WHERE a.FirstName != b.FirstName OR a.LastName != b.LastName OR [etc]... 是吗?里卡多!......确定我会在时机成熟的时候出拳。

标签: sql plsql oracle-sqldeveloper plsqldeveloper nzplsql


【解决方案1】:

表结构是否完全相同?如果是这样,您可能会使用 Set Operators,尽管性能可能不是最好的。大致如下:

Select * 
  from (Select * From TableA
       MINUS
       Select * from TableB) A
       Join
       (select * from TableB
       MINUS
       Select * from TableA) ON *common unique field if there is one*

每个 MINUS 子查询都会为您提供第一个表中无法在第二个表中找到完全匹配的记录。如果两个表中有一个共同的唯一标识符,那么您可以连接两个子查询的结果以获得您期望的结果。

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多