oracle 连接A B两张表对比,对比2个字段,但是2个字段是一对多关系,怎么比?

oracle 连接A B两张表对比,对比2个字段-字段1 、字段2(A B表都有)。

但是字段1和字段2是1对多关系(字段1对应多个字段2).

想要输出:如果A、B两个表的字段1或者2不同,输出异常原因:字段1不同/字段2不同。

由于字段1和字段2是一对多,在case when 比的时候 会出现:

字段1和字段2:A 表: 比 B表

  字段1:A 字段2:B                  字段1:A    字段2:C
  字段1:A 字段2: C                  字段1:A    字段2:D
  字段1:A 字段2: D                  字段1:A    字段2:B
  字段1:A 字段2: F

这样其实 A表和B表有3行记录一样,但是因为排序问题导致 结果对比都显示3行数据不一致(其实因该是A表比B表多一个AF,想要显示1行数据不一致,其他3行数据一致),这个咋解决。

回复
阅读 476
1 个回答

没用过 oracle,用个 SQLite 吧,它的语法类似,功能 oracle 应该都支持

结果

result
共 5 行,2 行不一致

SQLite 代码

WITH
  A(字段1, 字段2) AS (
    VALUES
      ('A', 'B'),
      ('A', 'C'),
      ('A', 'D'),
      ('A', 'F')
  ),
  
  B(字段1, 字段2) AS (
    VALUES
      ('A', 'C'),
      ('A', 'D'),
      ('A', 'B'),
      ('A', 'E')
  )

SELECT format('共 %d 行,%d 行不一致', COUNT(*), SUM(A.字段1 IS NULL OR B.字段1 IS NULL)) result
  FROM A
  FULL JOIN B ON (A.字段1, A.字段2) = (B.字段1, B.字段2);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏